我试图制作一个区域图,其中不同的区域彼此重叠而不是堆叠。
我有一个如下所示的数据框:
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
我怎样才能使区域图形不会相互堆叠,但最小的图形会覆盖在较大的区域图形之前?
由于
答案 0 :(得分: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) )
答案 1 :(得分:1)
使用tidyverse
:
library(forcats)
p + geom_area(aes(colour = variable,
fill= fct_reorder(variable, value, .desc = TRUE)), position = 'identity')
如果它与你想要的相反,请删除.desc = TRUE
。