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、正确打点或dashdottinglinetype 的类似数据,但它不适用于这个。删除日志转换也不起作用。 有任何想法吗? 数据如下(简化几行):

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 只显示实线的主要内容,如果未能解决你的问题,请参考以下文章

数据为 POSIXct 时,ggplotly() 不显示 geom_vline / geom_hline

闪亮,R:复选框,geom_hline,ggplot

R ggplot2 颜色映射与 geom_hline

要在HTML中显示实线边框,则如何写代码?

图例 geom_hline 顺序不正确

如何将图例添加到 ggplot2 中的多行?