R geom_hline 只显示实线
Posted
技术标签:
【中文标题】R geom_hline 只显示实线【英文标题】:R geom_hline only showing solid lines 【发布时间】:2021-05-20 20:47:36 【问题描述】:我正在使用ggplot2
制作一些情节,使用基本情节的函数然后添加一些元素。我有一个涉及添加geom_hline
的问题,但是在它适用于其他地块的地方,这个似乎不想将线显示为实体以外的任何东西。当我为这条线scale_linetype_manual
时,我必须制作values = 1
否则它会删除这条线(yintercept = 0.5
)。
代码如下:
#Aluminium (dissolved)
prm <- dat2[dat2$ParamID == "Aluminium (dissolved)",]
prm <- prm[prm$SiteID %in% c("SW1","SW2","SW3"),]
gplt <- ggplotCust(prm, c(0.05,1.0), dateStart, dateEnd, "Concentration (mg/L)",0.1) +
scale_y_continuous(trans='log10') +
geom_hline(aes(yintercept=0.5,linetype="dotted"),colour="red",show.legend = NA) +
scale_linetype_manual(name="Guideline Values",values=1, breaks=waiver(), labels="EA Criteria")
前两行是数据的子集(参数和站点),第三行调用自定义基础图:
ggplotCust <- function(prm, lm, dateStart, dateEnd, yLbl, jt)
ggplot(prm,aes(DateTime, rectRes)) +
geom_point(aes(y = jitter(rectRes,jt), colour =SiteID, shape=SiteID),size=2) +
geom_line(aes(y = jitter(rectRes,jt), colour =SiteID),lwd=1) +
scale_color_manual(name ="Site", values = c("GW1" = 'lightsalmon1', "SW1" = 'dodgerblue4',
"SW2"='forestgreen', "SW3"='purple')) +
scale_shape_manual(name ="Site", values = c("GW1" = 16, "SW1" = 15,
"SW2"=3, "SW3"=7)) +
theme_minimal() +
theme(legend.position="bottom") +
labs(x = "Date", y = yLbl, caption = prm$ParamID[1]) +
scale_x_date(date_breaks = "2 months", date_labels = "%b-%y") +
coord_cartesian(xlim= as.Date(c(dateStart,dateEnd)), ylim = lm)
变量是数据集、y 限制(向量)、要放大的开始和结束日期、y 标签和jitter
大小。
所以问题是,虽然这适用于 >1、正确打点或dashdotting
linetype
的类似数据,但它不适用于这个。删除日志转换也不起作用。
有任何想法吗?
数据如下(简化几行):
Row | DateTime | ParamID | SiteID | rectRes |
---|---|---|---|---|
114 | 20/04/2010 | Aluminium (dissolved) | SW1 | 0.14 |
154 | 20/07/2010 | Aluminium (dissolved) | SW1 | 0.08 |
196 | 21/10/2010 | Aluminium (dissolved) | SW1 | 0.13 |
234 | 19/01/2011 | Aluminium (dissolved) | SW1 | 0.07 |
289 | 26/05/2011 | Aluminium (dissolved) | SW1 | 0.03 |
328 | 16/08/2011 | Aluminium (dissolved) | SW1 | 0.08 |
非常感谢任何帮助! 干杯
【问题讨论】:
【参考方案1】:将linetype="dotted"
移出aes()
。
UPD。如果您想将其保留在图例中,可以将最后两行修改为以下内容:
geom_hline(aes(yintercept=0.5,linetype="dotted"),colour="red",show.legend = NA) +
scale_linetype_manual(name="Guideline Values",values=c(dotted=2), labels="EA Criteria")
【讨论】:
这行得通,但它没有出现在图例中(这就是它出现在 aes 中的原因) - 请注意,这适用于其他数据集,但不适用于这个(实际上是相同的数据集) 实际上我让它工作了,但这没有意义 - 如果我在 scale_linetype_manual 调用中将 values=1 替换为 values=c(6,8.5) ,那么它就可以工作。但这没有意义? 您的示例包含许多与问题无关的细节。尝试减少它并仅保留重现问题所需的最小值。请参阅 How to ask a good question 和 How to make a reproducible R example 上的资源以上是关于R geom_hline 只显示实线的主要内容,如果未能解决你的问题,请参考以下文章