Search code examples
rggplot2axisaxis-labels

R ggplot2 x-axis not properly show


My question is in the following.
here is my raw data:

type,com,year,month,value
A,CH,2016,1,0
A,CH,2016,2,0
A,CH,2016,3,0
A,CH,2016,4,0
A,CH,2016,5,0
A,CH,2016,6,0
A,CH,2016,7,0
A,CH,2016,8,0
A,CH,2016,9,453128
A,CH,2016,10,868256
A,CH,2016,11,1015080
A,CH,2016,12,650912
B,CH,2016,1,0
B,CH,2016,2,0
B,CH,2016,3,0
B,CH,2016,4,0
B,CH,2016,5,0
B,CH,2016,6,61273
B,CH,2016,7,27711
B,CH,2016,8,161780
B,CH,2016,9,48889
B,CH,2016,10,72805
B,CH,2016,11,131466
B,CH,2016,12,73756
C,CH,2016,1,0
C,CH,2016,2,0
C,CH,2016,3,0
C,CH,2016,4,0
C,CH,2016,5,0
C,CH,2016,6,0
C,CH,2016,7,0
C,CH,2016,8,2200
C,CH,2016,9,111384
C,CH,2016,10,28758
C,CH,2016,11,21161
C,CH,2016,12,0

I use it to plot a line graph with gglot2.

The code is:

test <- read.csv("test.csv", header = T)
test_list <- split(test, test$type)
Rplot <- ggplot(test_list$A, aes(x=month, y=value, col=com))+geom_line()
Rplot

Rplot

My question:
how to let my x-axis to display like month(1,2,3....,12)?
and how can I combine year and month showing on x-axis at the same time.(Jan2016, Feb2016,.....) or (2016/1, 2016/2,.....)

very appreciate.


Solution

  • Create date_label column as Date class in the dataframe using ymd() from lubridate package.

    library( 'lubridate' )
    test_list <- lapply( test_list, function( x ) { 
      x$date_label <- ymd( paste( x$year, month.abb[ x$month ], 01, sep = "-"))
      x 
      })
    

    Manipulate x axis using scale_x_date()

    # 1. date_labels = "%Y/%m"   - 2016/01
    # 2. date_labels = "%m"      - 01
    # 3. date_labels = "%b %Y"   - Jan 2016        
    
    library( 'ggplot2' )
    ggplot( data = test_list$A, aes( x = date_label, y = value, color = com, group = com ) ) +
      geom_line( size = 3 ) + 
      scale_x_date(name = "month",
                   date_labels = "%m", 
                   date_breaks = "1 month" )
    

    enter image description here

    ggplot( data = test_list$A, aes( x = date_label, y = value, group = com, color = com ) ) +
      geom_line(  size = 3 ) + 
      theme( axis.text.x = element_text( angle = 45, hjust = 1 )) +
      scale_x_date(name = "month_year",
                   date_labels = "%b %Y", 
                   date_breaks = "1 month" )
    

    enter image description here