自定义x轴刻度

18

我有一个非常大的数据框(两列),记录数量很多。我已经用ggplot2绘制了图表。 X轴是时间,Y轴是值。在特定的时间间隔内,从时间50到60,我想将刻度增量变小,例如(50,51,51,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.

我知道可以通过使用breaksminor_breaks来修改scale_x_continuous的刻度。但是,我没有得到预期的输出。以下是我的尝试:(注意:仅为示例创建了数据,因为我的数据非常大)。

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

code:(Update based on @Didzis Elferts suggestion) 
-----
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))+
   +theme(axis.title.x=element_text(size=16),axis.title.y=element_text(size=16))+ 
   +theme(axis.ticks.x = element_line(size = 1))+xlab("Time")+ylab("value")
   +theme(axis.ticks.length=unit(0.8,"cm"))

根据下面的建议,现在唯一的问题是50-60区间内X轴的值没有清晰显示。O/P示例有什么建议可以使其更加清晰明了!

1个回答

23

通过使用参数minor_breaks=,您可以设置次要网格线。要在x轴下方标出数字,所有数字都应在参数breaks=中提供。

ggplot(data=df, aes(x,y))+geom_line(size=1.6)+ 
  scale_x_continuous(breaks=c(10,20,30,40,seq(50,60,by=1),seq(70,200,10)),
          minor_breaks=seq(50,60,by=1))
对于第二个问题 - 你在theme()中设置了axis.ticks.x=element_line(size=5) - 这使得你的轴刻度变宽,因此它们呈现为小矩形。如果你想要让轴刻度更长,请使用axis.ticks.length=
+theme(axis.ticks.length=unit(0.5,"cm"))

你说得对。但是,在我应用了你的建议之后,次要刻度的值重叠在一起了。我看不到这些值。我们能否增加每个次要刻度之间的间距,以便可以读取这些值?也许如果我们改变字体或角度会有所帮助? - SimpleNEasy
你不能直接增加小刻度之间的间距。同时,所有x轴标签的字体大小和角度都可以一起更改。 - Didzis Elferts
@SimpleNEasy,这些值重叠是因为你的小间隔太接近了:minor_breaks=seq(50,60,by=2) - Matt

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