我试图用r和ggplot2创建堆积区域图。我喜欢看 like this,而是areas overlap and have holes。我试图确保区域堆叠,以便最近一个月(本例中为2016-05)具有最大值的区域位于底部。
相关帖子like this one似乎在数据中存在漏洞,这似乎不是问题所在。
以下是重新创建问题的示例代码:
sample.data <- structure(
list(
rank = structure(
c(34L, 34L, 34L, 35L, 35L, 35L, 34L, 34L, 34L, 34L, 35L, 35L, 35L, 35L, 35L, 34L),
.Label = c("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35"),
class = "factor"),
vendor = structure(
c(1L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 1L),
.Label = c("34", "35"),
class = "factor"),
year.month = c("2015-12", "2016-01", "2015-11", "2015-12", "2016-01", "2015-10", "2016-03", "2016-02", "2015-10", "2016-04", "2015-11", "2016-05", "2016-04", "2016-03", "2016-02", "2016-05"),
value = c(431616L, 272224L, 229288L, 195284L, 155168L, 154194L, 149784L, 137302L, 126612L, 117408L, 94141L, 56161L, 54606L, 53173L, 49898L, 45348L)),
.Names = c("rank", "vendor", "year.month", "value"),
row.names = c(6L, 8L, 4L, 5L, 7L, 1L, 12L, 10L, 2L, 14L, 3L, 15L, 13L, 11L, 9L, 16L),
class = "data.frame"
)
ggplot(data = sample.data, aes(x = year.month, y = value, group = vendor, color = vendor, reorder(-value), fill=vendor)) +
geom_area()
提前感谢您的帮助。
答案 0 :(得分:0)
尝试:+ geom_area(位置=&#34;闪避&#34;,stat =&#34;身份&#34;)
答案 1 :(得分:0)
以下作品:
ggplot(data = sample.data[order(sample.data$vendor),],
aes(x = year.month, y = value, group = vendor, color = vendor,
reorder(-value), fill=vendor)) + geom_area()
您只需订购数据:sample.data[order(sample.data$vendor),]
。
如果您想更改图表的顺序,您必须“重新定位”作为因素存储的供应商变量:
sample.data$vendor <- relevel(sample.data$vendor, ref="35")
以下是一些代码,用于根据您的标准确定要设置为基本级别的供应商:
with(sample.data, sample.data[year.month=="2016-05",
"vendor"][which.max(sample.data[year.month=="2016-05", "value"])])