我想创建一系列图表,其中 y 轴始终在 0 到 10 之间运行,但绘制的数据可能包含大于 10 的值。因此对于该系列
df <- tibble(
y = c(0, 5, 10, 12, 5),
x = c(1, 2, 3, 4, 5)
)
ggplot(df, aes(x = x, y = y)) +
geom_line() +
ylim(0, 10) # ylim is clearly not what I want
geom_line
将一直达到 12,但这将达到 y 轴上显示的最高值(即 10)之上。我的意思并不是说,只是 y 轴上标记的最高中断,但是实际 y 轴线本身仅上升到 10,而绘制的数据继续达到 df
中的最高值。
理想情况下,对于我制作的每个图,y 轴的高度将始终保持不变,但如果值大于 10,则图的高度会增加。
我想要实现的目标的一个示例显示在原始问题(用户不想要的)中显示的图中的这个问题中。除此之外,绘制的值低于最小 y 轴值,而我希望绘制的值高于最大绘制值。
但是,出于对一切美好事物的热爱,你为什么要这样做??????
我打算在 y 轴上标记 4 个断点,对应于设定的指导值。我绘制的数据是一个指数(越低越好),指数值没有简单的物理解释,除非与指导值相关。我不希望有人读到 y 轴后说,图 A 上的值是 12,图 B 上的值是 13,所以图 B 显然比图 A 更差。
我想要的是给人这样的印象,“哇,这两个值实际上是超出范围”,因此在一般定性意义上“这有点超出范围”并没有真正的意义。这远远超出了规模”。
也许你可以用 ggside 包做点什么?
例如
library(tidyverse)
library(ggside)
df1 <- tibble(
y = c(0, 5, 10, 12, 5),
x = c(1, 2, 3, 4, 5)
)
ggplot() +
geom_point(data = df1 %>% filter(y <= 10), aes(x = x, y = y)) +
geom_xsidepoint(data = df1 %>% filter(y > 10), aes(x = x, y = y)) +
scale_y_continuous(limits = c(0, 10), breaks = c(0, 2, 4, 6, 8, 10)) +
theme(ggside.panel.scale = .3,
ggside.panel.border = element_rect(NA, "black", linewidth = 0.5))
df2 <- tibble(
y = c(0, 5, 10, 22, 33, 5),
x = c(1, 2, 3, 4, 5, 6)
)
ggplot() +
geom_point(data = df2 %>% filter(y <= 10), aes(x = x, y = y)) +
geom_xsidepoint(data = df2 %>% filter(y > 10), aes(x = x, y = y)) +
scale_y_continuous(limits = c(0, 10), breaks = c(0, 2, 4, 6, 8, 10)) +
theme(ggside.panel.scale = .3,
ggside.panel.border = element_rect(NA, "black", linewidth = 0.5))
df3 <- tibble(
y = c(0, 1, 2, 3, 4, 25),
x = c(1, 2, 3, 4, 5, 6)
)
ggplot() +
geom_point(data = df3 %>% filter(y <= 10), aes(x = x, y = y)) +
geom_xsidepoint(data = df3 %>% filter(y > 10), aes(x = x, y = y)) +
scale_y_continuous(limits = c(0, 10), breaks = c(0, 2, 4, 6, 8, 10)) +
theme(ggside.panel.scale = .3,
ggside.panel.border = element_rect(NA, "black", linewidth = 0.5))
创建于 2024-09-30,使用 reprex v2.1.0