我有每月销售量数据:
YearMonth Sales Count
2010-04 300
2010-05 342
2010-06 425
我只想在r中绘制线形图以观察趋势。
我在r中使用ggplot2:
ggplot(data,
aes(x = YearMonth, y = `Sales Count`)) +
geom_line()
但是,r给我一个错误消息:
geom_path: Each group consists of only one observation.
Do you need to adjust the group aesthetic?
我尝试了多种方法将变量“ YearMonth”转换为数字变量,但它们都不起作用...
由于数据是在python中生成的,因此我使用以下命令检查了数据类型:
data.dtypes
它返回
YearMonth object
Sales Count int64
dtype: object
我尝试使用
进行转换data['YearMonth'] = pd.to_datetime(data['YearMonth'])
但是它将所有内容转换为一个月的第一天,即现在的数据如下:
YearMonth Sales Count
2010-04-01 300
2010-05-01 342
2010-06-01 425
因为x轴应该是每个月而不是每个月的第一天,所以是否可以只保留月份并将其绘制为数字或日期时间变量?
非常感谢!
编辑
实际上,当我在r上作图时,它只在x轴上显示2010、2011等年份。因此,如果我们可以更改x轴上显示的内容,则上述问题无关紧要。有没有一种方法可以定义在x轴上可以显示的内容,例如显示2010年4月,2010年5月,而不仅仅是年份?
解决方案
结合@Jon Spring和@ThomasPepperz的答案,以下代码可以准确地满足我的需求:
data[['YearMonth']] = lubridate::ymd(paste(data[['YearMonth']], 1))
ggplot(stats8, aes(YearMonth, `Sales Count`)) +
geom_line() +
scale_x_date(date_breaks = "6 months",
date_labels = "%Y %b") +
theme(axis.text.x = element_text(angle=90, hjust=1))
答案 0 :(得分:1)
data$date = lubridate::ymd(paste(data$YearMonth, 1))
library(ggplot2)
ggplot(data, aes(date, Sales_Count)) +
geom_line() +
scale_x_date(date_breaks = "month",
date_labels = "%Y %b")
答案 1 :(得分:0)
尝试:
df$YearMonth = lubridate::as_date(as.character(df$YearMonth), '%Y-%m')
df$month = lubridate::month(df$YearMonth)
使用'lubridate'转换为日期对象,然后使用month()仅提取月份并将其存储为新变量。