r - 在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()
提前致谢
解决方案
我不明白到底是什么给你带来了麻烦。如果我遍历数据框列表,我可以设置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)
推荐阅读
- wordpress - 用于取消已删除产品的 WC 订单的 Wordpress cronjob?
- graphql - 返回 graphql 错误时,如何捕获 RelayObervable Unhandled 错误?
- c# - 如何在 WPF 中覆盖最大化按钮?
- c++ - 尝试设置唯一指针布尔数组的值时出现 BAD_ACCESS 错误
- python - 如何识别使用 pydal 使用 sqlalchemy 创建的 sqlite 数据库?
- android - 插页式广告关闭后如何在 recyclerview 适配器中执行事件意图?
- sql - 如果任何值为 NULL SQL,则不返回行
- javascript - 如何在sharepoint中将未定义的值更改为空白
- c# - 为什么一个.net库需要引用其他.net库的依赖
- python - 无法将打印语句放入生成器