countrydf$dates <- format(as.Date(countrydf$date, format="%Y-%m-%d"), "%m/%y", ordered = T)
germanydf <- subset(countrydf,location == "Germany")
ggplot(germanydf, aes(x=dates, y=total_deaths)) +
geom_bar(aes(), stat = 'identity', position = 'dodge') +
geom_smooth(method="lm", col="Grey", size=1) +
labs(title="Deaths vs date in Germany", subtitle="From ourworldindata.org", y="Total Deaths", x="Date") +
theme(axis.text.x = element_text(angle = 45, vjust = 0.5, hjust=.5))

即使我格式化为日期,我仍然得到的日期为"01/2020,01/2021,01/2022“(不正确)与"01/2020,02/2020,03/2020”(正确)。任何帮助都将不胜感激!
同时,当查看数据帧时,它们的排序也是正确的,因此这显然是。

发布于 2022-11-05 21:59:55
函数format()返回一个字符串,而不是日期。因此,您可以得到格式为01/2020、02/2020等格式的字符串。当然,这些字符串在排序时不会按日期排序--但就像任何字符串一样,字母数字和01/2021放在02/2020之前。
到底发生了什么?当ggplot将变量作为X时,它会将其转换为一个因子,因为它是一个绝对变量(而不是连续变量)。默认情况下,因子级别按字母数字排序。
解决办法:
format函数。了解日期。如果需要,可以从日期开始(例如,使用lubridate).)。
https://stackoverflow.com/questions/74331730
复制相似问题