你好,我正在处理如下数据集
raw_data =
week v1 v3 v4 v5 v6
1 17 20.983819 7.799831 16.0600278 113.018687
2 34 22.651678 8.090671 16.4898951 120.824817
3 15 24.197048 6.892516 16.9805836 128.105372
4 14 26.016688 5.272781 17.471264 140.15794
5 26 27.572317 10.767018 17.8686156 154.886518
6 37 29.018684 21.280104 19.8096452 165.244061
7 27 30.395094 32.140543 22.937902 176.453934
8 24 31.832068 44.008145 28.714597 184.7598
9 16 33.383742 45.704626 39.2958153 193.461108
10 28 34.877819 39.355206 45.9069661 201.305558
我想要实现的是在一周中的同一张图中,将v3到v6的变量绘制为堆积面积图,而将v1绘制为线形图。
我尝试了以下代码,该代码确实绘制了堆栈区域图,但没有绘制线图。
mdf <- melt(raw_data, id="Week") # convert to long format
p <- ggplot(mdf, aes(x=Week, y=value)) + geom_area(aes(fill= mdf$variable), position = 'stack') + theme_classic()
p + ggplot(raw_data, aes(x=Week, y=v1)) +geom_line()
我收到以下错误
Error: Don't know how to add e2 to a plot
我厌倦了本文How to overlay geom_bar and geom_line plots with different number of elements using ggplot2?建议的方法,并使用了以下代码
mdf <- melt(raw_data, id="Week") # convert to long format
p <- ggplot(mdf, aes(x=Week, y=value)) + geom_area(aes(colour =
mdf$variable, fill= mdf$variable), position = 'stack') + theme_classic()
p + geom_line(aes(x=Week, y=mdf$variable=="v1"))
但随后出现以下错误
Error: Discrete value supplied to continuous scale
我尝试根据引用以下文章的以下代码转换v1变量,但是它无助于解决。
How do I get discrete factor levels to be treated as continuous?
raw_data$v1 <- as.numeric(as.character(raw_data$v1))
请帮助解决问题。另外,如何为堆叠图形中的每个图形创建黑色边框线,以便易于区分图形。
非常感谢您的提前帮助!
答案 0 :(得分:1)
使用您的melt
命令对我不起作用,因此我改用gather
。
您需要做的就是添加geom_line
并指定数据和映射:
mdf <- tidyr::gather(raw_data, variable, value, -week, -v1)
ggplot(mdf, aes(week, value)) +
geom_area(aes(fill = variable), position = 'stack', color = 'black') +
geom_line(aes(y = v1), raw_data, lty = 2)
注意:永远不要在$
内使用aes
!