如何在 ggplot2 的 x 轴上使用月份名称

How can I use name of a month in x-axis in ggplot2

我曾尝试使用 ggplot2 在 x 轴上绘制月份,但月份名称会自动显示为带小数的数字。我怎么能强制脚本绘制月份名称而不是数字?我使用了这段代码:

ggplot(df3, aes(x = month, y = PM)) + 
geom_line(aes(col = factor(travel))) + 
xlab("Month") + 
ylab(expression(paste("PM(",mu,"g/", m^3,")", sep=""))) 

数据如下:

df3 <- structure(list(month = c(9, 10, 9, 10, 1, 2, 3, 4, 5, 9, 10, 
                            1, 2, 3, 4, 5, 9, 10, 11, 12, 1, 2, 3, 4, 5, 11), 
                  travel = c("Diesel bus", 
                             "Diesel bus", "Diesel bus", "Diesel bus", "Diesel bus", "Diesel car", 
                             "Diesel car", "Diesel car", "Diesel car", "Diesel car", "Bicycle", 
                             "Bicycle", "Bicycle", "Bicycle", "Bicycle", "Gasoline car", "Gasoline car", 
                             "Gasoline car", "Gasoline car", "Gasoline car", "Elcectric bus", 
                             "Elcectric bus", "Elcectric bus", "Elcectric bus", "Elcectric bus", 
                             "Elcectric bus"), 
                  PM = c(22.6496512922918, 18.1829352554303, 
                         28.776408085308, 30.1441935430254, 23.8938954711914, 21.8288997171693, 
                         22.7177263732526, 29.8606175809457, 30.530998468399, 30.1288699182287, 
                         28.4038889338888, 19.4761033463478, 18.9449487406838, 20.3568456145256, 
                         16.5431814479828, 12.8668955993652, 21.6255497367427, 21.8725590587368, 
                         14.7631275227865, 12.5790810203552, 15.1794028663635, 19.3508881492176, 
                         15.895525373979, 15.3945024820964, 15.5982689292758, 12.1219868087769
                  )),
             .Names = c("month", "travel", "PM"),
             row.names = c(NA, -26L),
             class = "data.frame")

你也可以使用scale_x_discrete

ggplot(df3, aes(x=month, y=PM)) +
    geom_line(aes(col = factor(travel)))+
    xlab("Month")+ ylab (expression(paste("PM(",mu, "g/", m^3,")", sep=""))) +
    scale_x_discrete(labels=month.abb)    

scales

的替代解决方案

首先创建假的完整日期,然后只绘制没有年份和日期的月份:

library(scales)
df3$yearmonth <- as.Date(paste0("2018-", df3$month, "-1"))

# with month names (latin characters)
ggplot(df3, aes(x = yearmonth, y = PM, color = as.factor(travel))) +
  geom_line() + 
  xlab("Month")+ ylab (expression(paste("PM(",mu, "g/", m^3,")", sep=""))) +
  scale_x_date(labels = date_format("%b"))

# with month numbers
ggplot(df3, aes(x = yearmonth, y = PM, color = as.factor(travel))) +
  geom_line() +
  xlab("Month")+ ylab (expression(paste("PM(",mu, "g/", m^3,")", sep=""))) +
  scale_x_date(labels = date_format("%m"))