【发布时间】:2019-11-12 10:20:59
【问题描述】:
在使用 ggplot2 生成的绘图中,我无法将颜色和线型参考线组合成一个图例。线型显示时所有线型都以相同的方式键控,或者根本不显示。
我的绘图包括显示大部分观察结果的丝带,以及显示最小值、中值、最大值的线条,有时还包括一年的观察结果。
使用内置 CO2 数据集的示例代码:
library(tidyverse)
myExample <- CO2 %>%
group_by(conc) %>%
summarise(d.min = min(uptake, na.rm= TRUE),
d.ten = quantile(uptake,probs = .1, na.rm = TRUE),
d.median = median(uptake, na.rm = TRUE),
d.ninty = quantile(uptake, probs = .9, na.rm= TRUE),
d.max = max(uptake, na.rm = TRUE))
myExample <- cbind(myExample, "Qn1"= filter(CO2, Plant == "Qn1")[,5])
plot_plant <- TRUE # Switch to plot single observation series
myExample %>%
ggplot(aes(x=conc))+
geom_ribbon(aes(ymin=d.ten, ymax= d.ninty, fill = "80% of observations"), alpha = .2)+
geom_line(aes(y=d.min, colour = "c"), linetype = 3, size = .5)+
geom_line(aes(y=d.median, colour = "e"),linetype = 2, size = .5)+
geom_line(aes(y=d.max, colour = "a"),linetype = 3, size = .5)+
{if(plot_plant)geom_line(aes(y=Qn1, color = "f"), linetype = 1,size =.5)}+
scale_fill_manual("Statistic", values = "blue")+
scale_color_brewer(palette = "Dark2",name = "",
labels = c(
a= "Maximum",
e= "Median",
c= "Minimum",
f = current_year
), breaks = c("a","e","c","f"))+
scale_linetype_manual(name = "")+
guides(fill= guide_legend(order = 1), color = guide_legend(order = 2), linetype = guide_legend(order = 2))
plot_plant 设置为 TRUE 时,代码会绘制单个观测序列,但线型根本不会出现在图例中:
plot_plant 设置为 FALSE 时,线型会显示在图例中,但我看不出虚线图例条目之间的区别:
情节按预期工作,但我希望线型区别显示在图例中。在视觉上,当我绘制单个观察系列时,它更重要,因为实线和虚线或点线之间的区别更强。
在寻找答案时,我看到了将不同的统计数据(最小值、中值、最大值和单个系列)组合成一个变量并让 ggplot 确定线型的建议(例如 [this post]ggplot2 manually specifying color & linetype - duplicate legend)或制作一个描述线型的散列 [例如]How to rename a (combined) legend in ggplot2?,但这些方法似乎都不能很好地与带状图结合使用。
我尝试将我的数据格式化为长格式,这通常适用于 ggplot。如果我将所有统计数据绘制为线几何图形,但无法使功能区按我想要的方式工作,并且覆盖单个观察系列似乎需要将其存储在不同的数据表中,这将起作用。
【问题讨论】: