设置一个轴不覆盖整个数据范围,但仍然使用ggplot绘制整个数据范围

问题描述 投票:0回答:1

我想创建一系列图表,其中 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 更差。

我想要的是给人这样的印象,“哇,这两个值实际上是超出范围”,因此在一般定性意义上“这有点超出范围”并没有真正的意义。这远远超出了规模”。

r ggplot2 visualization yaxis
1个回答
0
投票

也许你可以用 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))

fig 1



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))

fig 2


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))

fig 3

创建于 2024-09-30,使用 reprex v2.1.0

© www.soinside.com 2019 - 2024. All rights reserved.