如何修复 R 代码(ggplot2)中 scale_x_date 的参数?

Posted

技术标签:

【中文标题】如何修复 R 代码(ggplot2)中 scale_x_date 的参数?【英文标题】:How to fix arguments for scale_x_date in R code (ggplot2)? 【发布时间】:2022-01-14 06:00:01 【问题描述】:

我需要您的帮助来查找此代码中的错误。我收到以下错误消息:Error: Invalid input: date_trans works with objects of class Date only。我认为问题出在scale_x_datearguments,但我无法解决。谢谢。

library(ggplot2)
library(scales)
library(lubridate)
library(readxl)

entrada<- read_excel("R_codes_examples/entrada_turistas.xlsx", sheet = "mensal", col_types = 
c("date", "numeric"))
ggplot(entrada, aes(x = entrada$`mes_ano`, y = entrada$`movimento_de_passageiros`)) +
geom_line( colour = "#0c4c8a") + 
scale_x_date(date_breaks = "6 months",labels = date_format("%b-%Y"),limits = c(as.Date("2006- 
08-01"), NA)) +
scale_y_continuous(labels=function(n)format(n, scientific = FALSE)) +
labs(y= "Movimento de Passageiros mensais 2006 a 2017 ", x = "Mês/Ano") +
xlab("") +
theme(axis.text.x=element_text(angle=60, hjust=1))

请在下面找到我的代码头:

    > dput(head(entrada))
  structure(list(mes_ano = structure(c(1136073600, 1138752000, 
  1141171200, 1143849600, 1146441600, 1149120000), tzone = "UTC", 
  class = c("POSIXct", "POSIXt")), movimento_de_passageiros = 
  c(119764, 100442, 114198, 
  124676, 113431, 115482)), row.names = c(NA, -6L), class = 
  c("tbl_df", "tbl", "data.frame"))

【问题讨论】:

查看entrada$`mes_ano`的类。正如错误消息告诉您的那样:scale_x_date 仅适用于 Date 类的对象。顺便说一句:摆脱entrada$。只需使用aes(x = `mes_ano`, ...) 尝试entrada 我们只能推测而不向我们展示您的(部分)数据。您的日期很可能存储为字符而不是日期类。尝试向我们提供一个 dput(head(entrada)) 以便我们可以实际帮助您。 @KeltonSantos 我会用 geom_col() 替换 geom_line(color = "#0c4c8a") @Rfanatic 我试过了,但我遇到了同样的错误。谢谢。 【参考方案1】:

有一些地方出了问题,是的,你的数据是正确的 :)

    labels = date_format("%b-%Y") 更改为date_labels = "%b-%Y" 您的限制不能包含一个 NA 值,因为它需要在哪里停止?这不能是无限的日期。 限制必须采用POSIXct 格式 只是一些代码风格的东西,entrada$'mes_ano' 不是必需的,因为您已经传递了数据,您可以直接按名称调用 x 和 y。

所以这里的固定代码假设您使用 POSIXct 数据(包括时间):

ggplot(entrada, aes(x = mes_ano, y = movimento_de_passageiros)) +
geom_line(colour = "#0c4c8a") + 
scale_x_datetime(date_breaks = "6 months", date_labels = "%b-%Y", limits = c(as.POSIXct("2006-01-01"), as.POSIXct("2006-12-01"))) +
scale_y_continuous(labels=function(n)format(n, scientific = FALSE)) +
labs(y= "Movimento de Passageiros mensais 2006 a 2017 ", x = "Mês/Ano") +
xlab("")`

这里是一个例子,如果你使用 as.Date 日期,那么请确保所有日期都具有相同的格式

ggplot(entrada, aes(x = as.Date(mes_ano), y = movimento_de_passageiros)) +
  geom_line(colour = "#0c4c8a") + 
  scale_x_date(date_breaks = "6 months", date_labels = "%b-%Y", limits = c(as.Date("2006-01-01"), as.Date("2006-12-01"))) +
  scale_y_continuous(labels=function(n)format(n, scientific = FALSE)) +
  labs(y= "Movimento de Passageiros mensais 2006 a 2017 ", x = "Mês/Ano") +
  xlab("")

【讨论】:

谢谢@Merijn van Tilborg,它工作得很好。我应该使用scale_x_datetime 而不是scale_x_date 好点,我使用了一些与您的问题相匹配的代码,我使用了scale_x_datetime 我将使用其中任何一个来更新我的答案。对于他们来说,您的日期(时间)格式需要保持一致。

以上是关于如何修复 R 代码(ggplot2)中 scale_x_date 的参数?的主要内容,如果未能解决你的问题,请参考以下文章

R语言使用scales包的hue_pal函数获取ggplot2任何级别的离散色码使用scales包的show_col函数可视化ggplot2任何级别的离散色码

R语言ggplot2可视化:ggplot2使用scale_shape_identity函数显示pch形状使用scale_y_reverse函数翻转pch数据点样式形状数据点样式pch

R语言使用scales包的hue_pal函数获取ggplot2任何级别的离散色码使用scales包的hue_pal函数获取ggplot2任何级别的反序(reverse)离散色码

R语言与医学统计图形-11ggplot2几何对象之散点图

R可视化使用ggplot2将坐标轴设置为对数坐标轴(Log Scale)

R语言ggplot2可视化地图并使用scale_fill_gradient函数自定义设置地图颜色刻度为灰色梯度刻度(grey gradient scales)