2017-10-11 102 views
0

我有一个如下所示的CSV文件。如何在数据框中将月份更改为月份?

year=c("2015","2016","2017") 
month=c("1","2","3","4","5","6","7","8","9","10","11","12") 
freq=c("10","12","16","12","21","16","23","22","20","19","21","15") 
df=data.frame(year, month, freq) 

ggplot(df, aes(x=month, y=freq, fill=year))+geom_bar(stat="identity) 

axis.x显示1,10,11,12,2,3,4,5,6,7,8,9

我想1,2,3,4,5,6,7,8,9,10,11,12

我该怎么办?

+1

不要存储数字串。在这种情况下,不幸的是字符串被'data.frame'转换为因子,所以你需要做'df $ month < - as.integer(as.character(df $ month))'使它们回到整数,尽管从数字开始显然更好。你的其他专栏也一样。 – alistaire

+0

这不是一个CSV文件,你是从矢量创建一个数据框。你的真实代码是否读取一个文件? – neilfws

回答

0

使用系数。绘制之前试试这个:

df$month <- factor(month, levels = 1:12) 

如果你有,你可以手动设置水平,使ggplot2应当按照您选择的顺序。

+0

由于'stringsAsFactors = FALSE'没有被指定,'month'将已经成为使用问题中代码的一个因素。问题是水平的顺序。 – neilfws

+0

我正在构建答案哈哈。首先我尝试了'month < - 1:12',之后我完全重现了这个例子。尽管如此,你确实评价得很快,效果很好。 –

+0

谢谢!我解决了:D –

0

由于@alistaire说,最好只用在首位数值开始,为month和所有其他变量:

month <- 1:12 

然后获得在x轴正确的标签,添加此到您的最后ggplot

+ scale_x_continuous(breaks = 1:12) 
相关问题