18

I have a very large data frame (2 columns) in terms of records. I have plotted the graph in ggplot2. The X axis is the time and the Y axis is values. Over a specific interval from time 50 to 60, I want to make the ticks increments to be smaller such as (50,51,51,53,...59,60). For the rest of the axis, it is fine to have the ticks incremented by 10. So,I would expect to have X-axis values like :

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

I know, I can modify the ticks through scale_x_continuous by using breaks and minor_breaks. However, I'm not getting the expected output. Here is my try:(note: have created data just for example as my data is very large).

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

Based on the suggestion below, the only problem now is the values of X-axis during the interval between 50-60 is not clearly appeared. sample of O/P Any suggestions to make it clear!!

zx8754
  • 52,746
  • 12
  • 114
  • 209
SimpleNEasy
  • 879
  • 3
  • 11
  • 32

1 Answers1

23

With argument minor_breaks= you set the minor gridlines. To set numbers under the x axis all number should be provided with argument 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))

For the second problem - you set axis.ticks.x=element_line(size=5) inside theme() - that makes your axis ticks wider so they appear as small rectangles. If you want to make axis ticks longer use axis.ticks.length=.

+theme(axis.ticks.length=unit(0.5,"cm"))
Didzis Elferts
  • 95,661
  • 14
  • 264
  • 201
  • You are right. However, after I applied you suggestion, the values of the minor breaks overlapped. I can't see the values. Can we increase the space between each minor tick, so the values can be read. Maybe if we change the font or the angle ? – SimpleNEasy Jul 20 '13 at 16:52
  • You can't directly increase space between miner breaks. Also the font size and angle can be changed for all x axis labels together. – Didzis Elferts Jul 20 '13 at 17:09
  • @SimpleNEasy, those values overlap because your minor breaks are too close together: `minor_breaks=seq(50,60,by=2)`. – Matt Mar 10 '16 at 16:34