2016-11-09 339 views
0

我想使區域陰謀與不同區域疊加而不是疊加。ggplot2 geom_area覆蓋區域在彼此前面的陰謀

我有一個數據幀,看起來像這樣:

 r variable  value 
1 45.0 Cat 1 4.057250e+03 
2 52.5 Cat 1 3.537323e+03 
3 56.1 Cat 1 3.429861e+03 
4 57.3 Cat 1 3.395330e+03 
5 57.6 Cat 1 3.389983e+03 
6 45.0 Cat 2 4.545455e-03 
7 52.5 Cat 2 4.509400e+01 
8 56.1 Cat 2 3.525753e+02 
9 57.3 Cat 2 4.185094e+02 
10 57.6 Cat 2 4.336622e+02 
11 45.0 Cat 3 4.074432e+03 
12 52.5 Cat 3 3.630504e+03 
13 56.1 Cat 3 3.919076e+03 
14 57.3 Cat 3 3.957039e+03 
15 57.6 Cat 3 3.970083e+03 
16 45.0 Cat 4 1.718182e+01 
17 52.5 Cat 4 9.318133e+01 
18 56.1 Cat 4 4.892154e+02 
19 57.3 Cat 4 5.617087e+02 
20 57.6 Cat 4 5.801001e+02 

我試圖讓區域地塊爲每個類別。我對那個代碼是:

p <- ggplot(reshaped_data, aes(r, value)) 
p <- p + labs(x = "X Axis", y = "Y Axis") + ggtitle(title) 
p <- p + geom_area(aes(colour = variable, fill= variable), position = 'stack') 
p 

而結果我得到這個樣子的: Generated Graph

我怎樣才能讓這個區域圖不相互堆疊,但最小覆蓋在更大的前面?

感謝

+1

'geom_area(position =「identity」,...)' – Nate

+0

太棒了。謝謝Nathan!有沒有辦法讓它自動排序外觀的順序? –

回答

1

彌敦道中寫道,你必須使用geom_area(position = "identity", ...)

不過在此之前,你應該重新排序變量的水平:

df$variable <- factor(df$variable, unique(df[order(df$value, decreasing = T),"variable"])) 

df$variable <- reorder(df$variable, df$value, function(x) -max(x)) 
+0

就是這樣!那就是我正在尋找的東西。謝謝Hubert! –

1

使用tidyverse

library(forcats) 
p + geom_area(aes(colour = variable, 
fill= fct_reorder(variable, value, .desc = TRUE)), position = 'identity') 

刪除.desc = TRUE如果它與你想要的相反。