我有一个像这样的文件:
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))
这里的第一个问题是,如果可能的话,我希望两条线之间的整个区域都是阴影,而不是一条线。我怎么能这样做?
但我也想给两条线上色。如果我为其中一个添加颜色:
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
那么,我想做什么呢?是否可以更改功能区的调色板?
答案 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