2017-03-01 128 views
4

我有以下數據集和r代碼來生成ggplot。上面的代碼的ggplot漸變填充不起作用

df = data.frame(Animals = c("Dog", "Cat", "Horse", "Giraffe"), Number =   c(88, 11, 107, 59), 
      Cat = c("A", "A", "B", "B"), 
      Place=c("Place1","Place2")) 
ggplot(df, aes(Animals, Cat, fill=Number)) + 
geom_tile() + 
scale_fill_gradient2(low= "red", high = "green", 
        mid = "orange", 
        midpoint = 50, 
        space = "Lab")+ 
geom_text(label=df$Number)+ 
facet_grid(.~Place) 

輸出是

enter image description here

如果看到圖中,漸變填充不作爲代碼提及。根據代碼 更高的數字應該是綠色的。

需要一些專家對此的看法。

回答

5

漸變填充是正確的。這是不正確的文本值。注意,例如,在低於HorseB數據具有107的值,但在你的情節是瓦文值爲11

Animals Number Cat Place 
1  Dog  88 A Place1 
2  Cat  11 A Place2 
3 Horse 107 B Place1 
4 Giraffe  59 B Place2 

更改爲geom_text(aes(label=Number))。通過使用geom_text(label=df$Number),您將達到ggplot環境之外的全球環境版本df,其中Number的值(按照數據框中的順序),88,11,107,59。因此,這是數字在圖中被繪製(從左到右)。然而,通過映射Numberlabel,通過使用aes(label=Number),可以確保所述label審美和fill審美都映射到圖形以相應的方式,如通過ggplot geoms和審美映射「自然」邏輯來確定。

ggplot(df, aes(Animals, Cat, fill=Number)) + 
    geom_tile() + 
    scale_fill_gradient2(low= "red", high = "green", mid = "orange", 
         midpoint = 50, space = "Lab")+ 
    geom_text(aes(label=Number)) + 
    facet_grid(.~Place) 

enter image description here

這似乎是一個玩具的例子,但我想我也想指出的是,你可以有ggplot空值刪除空間利用scales="free_x"當你情感上:

ggplot(df, aes(Animals, Cat, fill=Number)) + 
    geom_tile() + 
    scale_fill_gradient2(low= "red", high = "green", mid = "orange", 
         midpoint = 50, space = "Lab")+ 
    geom_text(aes(label=Number)) + 
    facet_grid(.~Place, scales="free_x") 

enter image description here

+0

有沒有辦法讓我重新排列x軸?說,而不是貓,狗,長頸鹿,馬我想要長頸鹿,狗,貓,馬 – vanathaiyan

+0

重新排序軸:因子變量可以通過指定您想要的順序簡單地重新排序。所以你會這樣做:'df $ Animals = factor(df $ Animals,levels = c(「長頸鹿」,「狗」,「貓」,「馬」))''。 – eipi10