具有“离散”尺度的离散值和geom_ribbon和geom_lines +问题

时间:2018-05-31 18:07:24

标签: r ggplot2

我有一个像这样的文件:

Month,Open,Closed
2017-08,53,38
2017-09,102,85
2017-10,58,38
2017-11,51,42
2017-12,32,24
2018-01,24,30
2018-02,56,46
2018-03,82,74
2018-04,95,89
2018-05,16,86

我想绘制两条线,并遮盖它们之间的差异。所以这有效:

ggplot()  +geom_line(data=issues.m,aes(x=Month,y=Open,group=1))
 +geom_line(data=issues.m,aes(x=Month,y=Closed,group=1)) 
 +geom_ribbon(data=issues.m, aes(x=Month,ymin=Closed,ymax=Open,color=Open-Closed))
 +theme_tufte() 
 +theme(axis.text.x = element_text(angle = 90, hjust = 1))

产生这个First attempt

这里的第一个问题是,如果可能的话,我希望两条线之间的整个区域都是阴影,而不是一条线。我怎么能这样做?

但我也想给两条线上色。如果我为其中一个添加颜色:

ggplot() 
 +geom_line(data=issues.m,aes(x=Month,y=Open,group=1,color='open')) 
 +geom_line(data=issues.m,aes(x=Month,y=Closed,group=1)) 
 +geom_ribbon(data=issues.m, aes(x=Month,ymin=Closed,ymax=Open,color=Open-Closed))
 +theme_tufte() 
 +theme(axis.text.x = element_text(angle = 90, hjust = 1))

我收到错误:

Error: Continuous value supplied to discrete scale

那么,我想做什么呢?是否可以更改功能区的调色板?

1 个答案:

答案 0 :(得分:1)

您的错误是因为您将Open - Closed映射到颜色上,这将是一个连续变量,即每个月这两个值之间的差异。但是你也在aes的一个geom_line内为ggplot分配了“开放”颜色。这意味着您正在尝试将连续值和离散值分配到相同的比例,这不会起作用。

如果您需要做的只是获得2种颜色,每行一种颜色,您可以采用以下两种方式之一,第二种方式更符合tidyverse / scale_x_date方式的东西。

首先我将日期转换为日期对象以清理x轴并避免旋转标签 - 随意尝试在geom_line中正常工作的日期中断。

不那么“整洁”的方法是只生成两个Open,一个用于Closed,一个用于library(tidyverse) df_dated <- df %>% mutate(month2 = sprintf("%s-01", Month) %>% lubridate::ymd()) ggplot(df_dated, aes(x = month2)) + geom_ribbon(aes(ymin = Open, ymax = Closed), fill = "lightblue2") + geom_line(aes(y = Open), color = "green3") + geom_line(aes(y = Closed), color = "red") + ggthemes::theme_tufte() ,并为每个{/ p>分配颜色。

theme

但更惯用的“整洁”方式是制作数据的长形版本,以便您可以映射变量 - 在这种情况下,观察是开放还是结束价值 - 在美学上如颜色。这也为你提供了一个传奇 - 如果你不想要它,你可以在geom_line中删除它。这使您可以设置颜色的比例,而不是硬编码到每个df_date_long <- df_dated %>% gather(key, value, -month2, -Month) ggplot(df_dated, aes(x = month2)) + geom_ribbon(aes(ymin = Open, ymax = Closed), fill = "lightblue2") + geom_line(aes(y = value, color = key), data = df_date_long) + scale_color_manual(values = c(Open = "green3", Closed = "red")) + ggthemes::theme_tufte()

sencha -sdk /home/user/project/extjs-6.5.3.57 generate app Application /home/user/project/app