错误:不知道如何将e2添加到绘图中

时间:2018-12-13 20:53:32

标签: r ggplot2 plot

你好,我正在处理如下数据集

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))

请帮助解决问题。另外,如何为堆叠图形中的每个图形创建黑色边框线,以便易于区分图形。

非常感谢您的提前帮助!

1 个答案:

答案 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