如何修复 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_date
arguments,但我无法解决。谢谢。
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可视化使用ggplot2将坐标轴设置为对数坐标轴(Log Scale)
R语言ggplot2可视化地图并使用scale_fill_gradient函数自定义设置地图颜色刻度为灰色梯度刻度(grey gradient scales)