【问题标题】:R - ggplot2 geom_area only one category visible?R - ggplot2 geom_area 只有一个类别可见?
【发布时间】:2016-10-11 20:23:01
【问题描述】:

R 新手,stackoverflow 新手,请见谅....

我正在尝试使用 ggplot2 在 R 中绘制时间序列图。我想显示两个折线图,它们在给定日期的值下方填充。我一直在尝试使用 geom_area(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))

我想展示两种颜色。 MW.01A 线下方一种颜色,MW.01B 线下方一种颜色。

有什么帮助吗?

【问题讨论】:

  • 您应该提供最小的reproducible example 与示例输入数据,以便更清楚到底发生了什么。如果我们可以将代码复制/粘贴到 R 中进行测试,将会更容易为您提供帮助。
  • 你有两种颜色,但是当你把一种透明颜色放在另一种上面时,它们会组合成另一种颜色。删除 alpha 以查看。如果需要查看两个组,您可以使用 fill = rev(variable) 反转首先绘制哪个变量。
  • 对不起。我更新了OP。新图片也已更新。

标签: r plot ggplot2


【解决方案1】:

用 geom_area 试试这个,用一些综合生成的 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))

【讨论】:

    【解决方案2】:

    我相信geom_areaggplot2 中被geom_ribbon 取代,所以我将在我的解决方案中使用后者。对于此解决方案,您还需要将数据从长到宽重组,为每个图例类别提供自己的列。我将使用 reshape2 包中的 dcast 函数来执行此操作。

    这里的想法是添加具有不同ymax 变量的层,使用fill 选项分配图例标签,然后使用scale_fill_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))
    

    【讨论】:

    • 这是完美的,谢谢。我一直专注于使用 geom_area 来获取绘图,我什至没有考虑将数据转换回使用 geom_ribbon。仍然不确定为什么 geom_area 不能工作,它会让我发疯!即使我反转变量(如上所述)颜色切换,但您仍然看不到两组。
    猜你喜欢
    • 2016-03-27
    • 2010-12-15
    • 1970-01-01
    • 2017-01-24
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多