2014-10-20 22 views
5

ggplot kullanarak bir ısı haritası oluşturmak istiyorum, ancak y eksenini gözlem sayısına göre sıralamak istiyorum. Veri çerçevesini N sütununa göre sıralıyorum ve gözlem sayısını eksen etiketinde görünecek şekilde grup adına ekleyin. Verileri çizdiğimde, grup adına göre yeniden sipariş verir. Veri seviyesinde belirttikleri sıraya göre faktör seviyelerini belirlemenin bir yolu var mı? Faktör düzeylerini bir veri çerçevesinde görüntülendikleri sıraya nasıl ayarlayabilirim?

Bazı veriler:

library(dplyr) 
library(tidyr) 
library(ggplot2) 

school <- c("School A", "SChool B", "School C", "School D", "School E", "School F") 
N <- c(25,28,12,22,30,25) 
var1 <- c(1,0,1,1,0,1) 
var2 <- c(0,0,0,1,0,1) 
var3 <- c(0,1,0,1,1,1) 

df <- tbl_df (data.frame (school, N, var1, var2, var3)) 

df <- arrange (df, N) %>% 
    gather (variable, value, var1:var3) 

df$school <- paste0 (df$school, " (", df$N, ")") 

df <- select (df, school, variable, value) 

ggplot(df, aes(variable, school)) + geom_tile(aes(fill = value), colour = "white") + 
    scale_fill_gradient(low = "white",high = "steelblue") 

Sonuçta Okulların sırası olmak isteyen:

Okul C (12)

Okul D (22)

Okul A (25)

School F (25)

Okul B (28)

Okul E ben otomatik olarak yapmak için bir yol bulmak ve yeniden ayarlamak faktör seviyelerini her zaman yok istediğiniz birden araziler için bunu yapmak istiyor gibi (30)

. Bu çevrede

cevap

4

bir yolu, bir işlev

f <- function(x) factor(x, levels = unique(x)) 
ve sonra ggplot(df, aes(variable, f(school))) + ...

tarafından diyoruz oluşturabilir bu her zaman yazarak önlemek için

ggplot(df, aes(variable, factor(school, levels = unique(school)))) + ... 

için ggplot çağrıyı değiştirmektir

Bunun, faktörün ilk seviyesini çizimin altına yerleştireceğini unutmayın. Aşağıdaki forcats boru ekleme

df$school <- reorder(df$school, rep(6:1, length.out=length(k)), order=TRUE) 

enter image description here

+0

Teşekkürler @konvas - mükemmel çalıştı. – Greg

0

Tek function(x) factor(x, levels = rev(unique(x))) giden yolu değiştirmek gerekir ggplot() numaralı çağrıdan önceki kod.

library(forcats) 
df$school <- fct_inorder(df$school) %>% fct_rev() 

fct_inorder() veri çerçevesi sırayla faktör seviyelerini oluşturur ve arsa doğru yönde gider böylece fct_rev() bunları tersine çevirir.

2

: Eğer üst kısmında isterseniz, school sütun ve sipariş faktörünü yapmak olacaktır f

İlgili konular