R ggplot2 x轴不正确显示

问题描述:

我的问题是在下面。
这里是我的原始数据:R ggplot2 x轴不正确显示

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 

我用它来绘制了曲线图,与gglot2

的代码是:

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

我的问题:
如何让我的X轴,显示一个类似个月(1,2,3 ......,12 )?
以及如何结合同时显示在x轴上(2016年1月,2016年2月,......)或(2016/1,2016/2,..... )

非常感谢。

在使用ymd()lubridate包数据帧创建date_labelDate类。错误的eval(expr中,ENVIR,enclos)::

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

使用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

+0

谢谢。我怎样才能调整我的情节的宽度和高度?因为如果我的数据有很多行,x轴会变得太多。 –

+0

您是否在讨论修正长宽比 – Sathish

+0

长宽比:http://*.com/questions/7056836/how-to-fix-the-aspect-ratio-in-ggplot – Sathish

对于第一种情况,您可以将月份转换为一个因子。以下代码将消除该月的小数。

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 

enter image description here

要获得数字月份,你必须有一个新列。我将使用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)) 

enter image description here

+0

我得到这个错误操纵x轴对象'exactDate'找不到 –

+0

'test %mutate(exactDate = paste(month.abb [as.numeric(as.character(month))],year,sep =“”))'应该添加一个名为exactDate的列,并且不应该发生此错误。 – discipulus