如何使用 ggplot2 在不影响 R 中的其他行的情况下裁剪高于某个值的行?
How to crop a line when it's above a certain value without affecting other lines in R using ggplot2?
我正在尝试使用 ggplot2
包在 R 中创建图表。根据下面的简化示例,我可以毫无问题地制作图表:
library(tidyverse)
A <- c(10,9,8,7,6,5,4,3,2,1,2,3,4,5,6,7,8,9,10)
B <- c(15,14,13,12,11,10,9,8,7,6,7,8,9,10,11,12,13,14,15)
C <- rep(5,19)
D <- c(1:19)
data1 <- tibble(A, B, C, D)
data1 <- gather(data1, Type, Value, -D)
plot <- ggplot(data = data1, aes(x = D, y = Value))+
theme_light()+
geom_line(aes(colour = Type), size=0.75)+
theme(legend.title = element_blank())
原始图表看起来像这样,但它们的制作方式与示例中的几乎相同:
问题是我想在 A
(示例中为红色;原始图中为蓝色实线)达到 C
(示例中为蓝色;原始图中为红色实线)时裁剪) 不影响 B
(示例中为绿色;原始图中的其他所有内容)。
复杂的是我真的不想更改原始数据集的结构,所以我希望在创建绘图时有一种方法可以做到这一点?
非常感谢,
卡罗莱纳州
是的,您可以在 ggplot 调用中完成,方法是将数据框的过滤版本传递给 geom_line
的 data
参数:
ggplot(data = data1, aes(x = D, y = Value))+
theme_light() +
geom_line(aes(colour = Type),
data = data1 %>%
filter(!(Type == "A" & Value > mean(Value[Type == "C"]))),
size = 0.75)+
theme(legend.title = element_blank())
但是,从您的原始图来看,我认为最简洁的方法是缩小 x 轴限制以“切断”下方蓝线与水平红线相交处的任一端,因为这根本不会影响上面的蓝色虚线。您可以使用 lims(x = c(0.25, 12.5)
切断数据,但通过设置 coord_cartesian(xlim = c(0, 12.5))
保留轴上 0 的下限
我正在尝试使用 ggplot2
包在 R 中创建图表。根据下面的简化示例,我可以毫无问题地制作图表:
library(tidyverse)
A <- c(10,9,8,7,6,5,4,3,2,1,2,3,4,5,6,7,8,9,10)
B <- c(15,14,13,12,11,10,9,8,7,6,7,8,9,10,11,12,13,14,15)
C <- rep(5,19)
D <- c(1:19)
data1 <- tibble(A, B, C, D)
data1 <- gather(data1, Type, Value, -D)
plot <- ggplot(data = data1, aes(x = D, y = Value))+
theme_light()+
geom_line(aes(colour = Type), size=0.75)+
theme(legend.title = element_blank())
原始图表看起来像这样,但它们的制作方式与示例中的几乎相同:
问题是我想在 A
(示例中为红色;原始图中为蓝色实线)达到 C
(示例中为蓝色;原始图中为红色实线)时裁剪) 不影响 B
(示例中为绿色;原始图中的其他所有内容)。
复杂的是我真的不想更改原始数据集的结构,所以我希望在创建绘图时有一种方法可以做到这一点?
非常感谢,
卡罗莱纳州
是的,您可以在 ggplot 调用中完成,方法是将数据框的过滤版本传递给 geom_line
的 data
参数:
ggplot(data = data1, aes(x = D, y = Value))+
theme_light() +
geom_line(aes(colour = Type),
data = data1 %>%
filter(!(Type == "A" & Value > mean(Value[Type == "C"]))),
size = 0.75)+
theme(legend.title = element_blank())
但是,从您的原始图来看,我认为最简洁的方法是缩小 x 轴限制以“切断”下方蓝线与水平红线相交处的任一端,因为这根本不会影响上面的蓝色虚线。您可以使用 lims(x = c(0.25, 12.5)
切断数据,但通过设置 coord_cartesian(xlim = c(0, 12.5))