定制轴间断点间隔

12

我有一些连续的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")+

graph

您看到,标签重叠了。我该如何更清晰地展示它们?


你想要实际的刻度线,还是只需要线条? - Ricardo Saporta
如果可能的话,我想要两个。 - SimpleNEasy
1个回答

27

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

输入图像描述

另外,您可以使用 coord_cartesian 来放大所需的 x 范围。底层数据保持不变,我们只是放大原始数据的一小部分。然后将缩放后的图形作为子图添加到原始图形中。有许多方法可以排列子图。以下是一个示例:

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

请问您能否明确您想要实现的目标是什么?100到200之间的刻度如何增加50到60之间的间距?您拥有您所拥有的像素数量。如果在50-60区间发生了非常特殊的情况,我宁愿考虑制作一个子图来放大该部分。然而,没有人能猜出您想要什么。请具体说明(http://meta.stackoverflow.com/help/how-to-ask)。 - Henrik
是的,你说得对,50-60区间发生了一些特殊的事情,我希望在图表中清楚地展示出来。我认为减少100-200之间的刻度会有所帮助,不至于压缩50-60区间。我只想显示此区间的小标签刻度。我认为唯一的方法是采用您的建议。那么,如何制作一个子图,将该部分放大? - SimpleNEasy
我们如何消除上图中图形起点(原点)和0之间的空格?这与environment()有关吗? - SimpleNEasy
@SimpleNEasy,在创建g1图时,尝试添加scale_x_continuous(expand = c(0, 0)) - Henrik
太好了!只是好奇:您的c(0,0.2)图与c(0,0)有何不同?请参见[此处](http://docs.ggplot2.org/current/continuous_scale.html):“expand:长度为两个数字向量,给出用于扩展比例范围的乘法和加法常数,以便数据和轴之间有一个小间隙。”。如果数字“冲突”(例如0与0.2),我不确定结果是什么。好吧,只要您对自己的图表满意就好! - Henrik
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接