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
我的问题:
如何让我的X轴,显示一个类似个月(1,2,3 ......,12 )?
以及如何结合年和月同时显示在x轴上(2016年1月,2016年2月,......)或(2016/1,2016/2,..... )
非常感谢。
在使用ymd()
从lubridate
包数据帧创建date_label
列Date
类。错误的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")
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")
对于第一种情况,您可以将月份转换为一个因子。以下代码将消除该月的小数。
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
要获得数字月份,你必须有一个新列。我将使用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))
我得到这个错误操纵x轴对象'exactDate'找不到 –
'test %mutate(exactDate = paste(month.abb [as.numeric(as.character(month))],year,sep =“”))'应该添加一个名为exactDate的列,并且不应该发生此错误。 – discipulus
谢谢。我怎样才能调整我的情节的宽度和高度?因为如果我的数据有很多行,x轴会变得太多。 –
您是否在讨论修正长宽比 – Sathish
长宽比:http://*.com/questions/7056836/how-to-fix-the-aspect-ratio-in-ggplot – Sathish