11

我有连续 x 和 y 值的数据。在特定的 x 间隔内,我想让刻度增量更小,例如从 50 到 60,间隔之间的距离应为 1(50、51、52、53 ... 59、60)。对于轴的其余部分,可以将刻度增加 10。我想要的 x 轴将在以下位置中断:

10,20,30,40,50,51,52,53,54,55,56,57,58,58,60,70,80,90,..190,200

我试过的:

x <- seq(1:200)
y <- seq(51, 250, by = 1)
df <- data.frame(x = x, y = y)

ggplot(data = df, aes(x, y)) +
  geom_line(size=1.6)+ 
  scale_x_continuous(breaks = c(10, 20, 30, 40, seq(50, 60, by = 2), seq(70, 200, 10)),
                     minor_breaks = seq(50, 60, by = 2)) +
theme(axis.text.x = element_text(size = 16),
      axis.text.y = element_text(size = 16),
      axis.title.x = element_text(size = 16),
      axis.title.y = element_text(size = 16),
      axis.ticks.x = element_line(size = 1),
      axis.ticks.length = unit(0.8, "cm")) + 
xlab("Time") + ylab("value")+

图形

如您所见,标签是重叠的。我怎样才能以更清晰的方式实现这一目标?

4

1 回答 1

26

挤入比每 10 个标签更多的标签似乎非常紧张。因此,您可以尝试将标签放在刻度线 52 到 58 处,方法是将这四个位置标记为""

ggplot(data = df, aes(x = x, y = y)) +
  geom_line() + 
  scale_x_continuous(breaks = c(seq(from = 10, to = 200, by = 10),
                                seq(from = 52, to = 58, by = 2)),
                     labels = c(seq(from = 10, to = 200, by = 10), rep("", 4)))

在此处输入图像描述

或者,您可以使用 放大相关的 x 范围coord_cartesian。底层数据不变,我们只是放大了一小部分原始数据。然后可以将放大的图作为子图添加到原始图。有很多方法可以安排子图。这是一个例子:

# The original plot on full range of x
g1 <- ggplot(data = df, aes(x = x, y = y)) +
  geom_line() 

# zoom in to the relevant section of x 
g2 <- ggplot(data = df, aes(x = x, y = y)) +
  geom_line() +
  coord_cartesian(xlim = c(49, 61)) +
  scale_x_continuous(breaks = seq(from = 50, to = 60, by = 2))

# print g1, and then add g2 on top using viewport from package grid
g1
print(g2, vp = viewport(x = 0.75, y = 0.3, width = 0.35, height = 0.35))

在此处输入图像描述

于 2013-10-06T23:10:14.187 回答