R-ggplot2 geom_区域是否只有一个类别可见?

R-ggplot2 geom_区域是否只有一个类别可见?,r,plot,ggplot2,R,Plot,Ggplot2,新来的R,新来的stackoverflow,所以请原谅我 我正在尝试使用ggplot2在R中绘制时间序列图。我想展示两个线图,它们填充在给定日期的值之下。我一直在尝试使用geom_区域(position=“identity”)函数来实现这一点 但是,只有一种颜色显示在我的图表上(尽管两种颜色都显示在图例中)。我开始使用melt()融化数据,现在使用三列(X=时间,变量=地下水井,值=地下水位)。下面是我的代码的简化版本,以及我得到的截图 Bank01MWtest<-data.frame(X

新来的R,新来的stackoverflow,所以请原谅我

我正在尝试使用ggplot2在R中绘制时间序列图。我想展示两个线图,它们填充在给定日期的值之下。我一直在尝试使用geom_区域(position=“identity”)函数来实现这一点

但是,只有一种颜色显示在我的图表上(尽管两种颜色都显示在图例中)。我开始使用melt()融化数据,现在使用三列(X=时间,变量=地下水井,值=地下水位)。下面是我的代码的简化版本,以及我得到的截图

Bank01MWtest<-data.frame(X=(c(1,2,2,1)),variable=(c("MW-01A","MW-01A","MW-01B","MW-01B")),value=(c(576,571,584,580)))

ggplot(data=Bank01MWtest, aes(x=X, y=value,group=variable))+geom_area(position="identity", aes(fill=variable))+geom_line(aes(color=variable))+coord_cartesian(ylim=c(570,590))

Bank01MWtest我相信
geom_区域
正在被
ggplot2
中的
geom_功能区
所取代,因此我将在解决方案中使用后者。对于此解决方案,您还需要从长到宽重新构造数据,为每个图例类别提供自己的列。我将使用
reformae2
包中的
dcast
函数来实现这一点

这里的想法是使用不同的
ymax
变量添加图层,使用
fill
选项分配图例标签,然后使用
scale\u fill\u manual
功能添加带有颜色的图例

library(ggplot2)
library(reshape2)

Bank01MWtest<-data.frame(X=sample(c(1,1,2,2)),
                     variable=sample(c("MW01A","MW01A","MW01B","MW01B")),
                     value=sample(c(576,571,584,580)))

### Note above I modified your category labels by getting rid of the "-" sign 
### so that they can be used as variable names below.

dat = dcast(Bank01MWtest, X~variable)

ggplot(data=dat, aes(x=X)) + 
  geom_ribbon(aes(ymin=0, ymax=MW01A, fill="MW01A")) + 
  geom_ribbon(aes(ymin=0, ymax=MW01B, fill="MW01B")) +
  scale_fill_manual("", values=c("green", "blue")) +
  coord_cartesian(ylim=c(570,590))
库(ggplot2)
图书馆(E2)

Bank01MWtest在geom_区域尝试此方法,使用一些合成生成的Bank01MWtest数据集:

head(Bank01MWtest)
    Time variable    value
1 2016-07-01   MW-01A 582.5482
2 2016-07-02   MW-01A 580.5652
3 2016-07-03   MW-01A 582.3305
4 2016-07-04   MW-01A 583.3122
5 2016-07-05   MW-01A 576.3432
6 2016-07-06   MW-01A 584.4086

tail(Bank01MWtest)
        Time variable    value
195 2016-10-03   MW-01B 573.8355
196 2016-10-04   MW-01B 575.3218
197 2016-10-05   MW-01B 570.8007
198 2016-10-06   MW-01B 572.3415
199 2016-10-07   MW-01B 575.3291
200 2016-10-08   MW-01B 578.0055

ggplot(data=Bank01MWtest, aes(x=Time, y=value,group=variable))+
  geom_area(position='identity', aes(fill=variable), alpha=0.2)+
  scale_x_date(date_breaks= "1 month", date_minor_breaks = "15 days", date_labels = "%b", 
               limits = c(min(Bank01MWtest$Time),max(Bank01MWtest$Time))) +
  geom_line(aes(color=variable))+coord_cartesian(ylim=c(570,590))

您应该提供最简单的示例输入数据,以便更清楚地了解发生了什么。如果我们可以将代码复制/粘贴到R中进行测试,这将更容易帮助您。您有两种颜色,但当您将一种透明颜色置于另一种透明颜色之上时,它们将组合成不同的颜色。移除alpha以查看。如果需要查看这两个组,可以使用
fill=rev(variable)
反转首先绘制的变量。对不起。我更新了操作。一个新的图像也被更新。这是完美的,谢谢。我一直非常专注于使用geom_区域获得绘图,我甚至没有考虑将数据转换回geom_功能区。仍然不知道为什么geom_区域不能工作,但它会继续让我发疯!即使我反转变量(如上所述),颜色也会切换,但您仍然无法同时看到这两个集合。