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

Wan*_*goR 7 plot r ggplot2

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

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

数据如下:

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")
Run Code Online (Sandbox Code Playgroud)

Mam*_*zal 5

你也可以用 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)    
Run Code Online (Sandbox Code Playgroud)

  • @NickVence 我也观察到了同样的情况。`scale_x_discrete(limits = Month.abb)` 为我解决了这个问题。 (3认同)

sch*_*sie 5

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"))
Run Code Online (Sandbox Code Playgroud)