简体   繁体   English

R ggplot2 x轴未正确显示

[英]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 . 我用它来绘制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)? 如何让我的x轴像月份一样显示(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,.....) 如何在x轴上同时显示年份月份 (2016年1月,2016年2月,.....)或(2016/1/2016/2016,.....)

very appreciate. 非常感谢。

For the first case, you can convert month to be a factor. 对于第一种情况,您可以将月份转换为一个因素。 The following code would eliminate decimals in the month. 以下代码将删除月中​​的小数。

test$month <- as.factor(test$month)
test_list <- split(test, test$type)
Rplot <- ggplot(test_list$A, aes(x=month, y=value, col=com, group = 1))+geom_line()
Rplot

在此输入图像描述

To get numeric months you have to have a new column. 要获得数字月份,您必须拥有一个新列。 I will create a new one using dplyr package and change that. 我将使用dplyr包创建一个新的并更改它。

library(dplyr)
# make a new column by joining month after converting it to character and year.
test <- test %>% mutate(exactDate = paste(month.abb[as.numeric(as.character(month))], year, sep=""))

# convert to factor
test$exactDate <- factor(test$exactDate, levels = c("Jan2016","Feb2016","Mar2016","Apr2016","May2016","Jun2016",
                                                    "Jul2016","Aug2016","Sep2016", "Oct2016", "Nov2016", "Dec2016"),
                         labels =  c("Jan2016","Feb2016","Mar2016","Apr2016","May2016","Jun2016",
                                    "Jul2016","Aug2016","Sep2016", "Oct2016", "Nov2016", "Dec2016"))

# Plot similarly
test_list <- split(test, test$type)
Rplot <- ggplot(test_list$A, aes(x=exactDate, y=value, col=com, group = 1))+geom_line()

# Rotate axis labels by 90 degrees
Rplot+ theme(axis.text.x=element_text(angle=90, hjust=1))

在此输入图像描述

Create date_label column as Date class in the dataframe using ymd() from lubridate package. 使用来自lubridate包的ymd()在数据ymd()date_label列创建为Date类。

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() 使用scale_x_date()操纵x轴

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

在此输入图像描述

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

在此输入图像描述

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM