如何在 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"))
我曾尝试使用 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"))