首页 > 解决方案 > 在ggplot2中将水平线插入折线图

问题描述

我必须绘制 25 个图,每个图都有自己的数据集。我需要在每个图中插入一条水平线。问题是,坐标不能被硬编码,因为每个数据集的范围都不同。我需要让水平线始终位于相应数据集的第一个值

这是我尝试过的线的几何图形(在这种情况下,y 轴截距是硬编码的,没有帮助)。

+ geom_hline(yintercept=c(75,0), linetype="dotted") 

我可以使用以下方法获取每条线的 y 轴交点的值(在每个绘图的每个数据集中位于相同的位置):

dataset[1, 6]

我也可以将其存储在这样的向量中

coord <- dataset[1, 6]

但是没有任何成功将这些结合在一起

我试过没有运气:

 + geom_hline(yintercept=coord, linetype="dotted") 

示例代码:

a <- c(10,40,30,22)
b <- c(1,2,3,4)

df <- data.frame(a,b)

try <- df %>% ggplot(aes(x = b, y = a)) +  geom_line() +   scale_y_continuous(expand = c(0,0), limits = c(0, NA)) + geom_hline(yintercept=c(30,0), linetype="dotted") + theme_tq()

提前致谢

标签: rggplot2

解决方案


我不明白到底是什么给你带来了麻烦。如果我遍历数据框列表,我可以设置yintercept每个相应图的 ,而不会太麻烦。下面的例子:

library(ggplot2)
library(patchwork)

# Split the economics dataset as an example
datasets <- split(economics, cut(seq_len(nrow(economics)), 9))

# Loop through list of dataframes, set hline to [1, 6] (drop because tibble)
plots <- lapply(datasets, function(df) {
  ggplot(df, aes(date, unemploy)) +
    geom_line() +
    scale_y_continuous(limits = c(0, NA)) +
    geom_hline(yintercept = c(df[1, 6, drop = TRUE], 0),
               linetype = "dotted")
})

# For visualisation purposes
wrap_plots(plots)

reprex 包于 2020-12-04 创建(v0.3.0)


推荐阅读