R 如何以正确的日期顺序绘制此数据?
我有这样一个数据框(按日期顺序): 但是,当我用下面的代码绘制时,它不会按数据框中保存的顺序排序。相反,它按字母顺序绘制它们(参见x轴)。如何解决这一问题,以便按照数据框中保存的顺序进行绘图 请注意,日期列的类型可能是字符,这就是原因,但将其更改为日期格式是很棘手的,因为没有日期,当您这样做时,它会更改,例如从6月18日更改为01-1918-06,这在图表上看起来不太好。所以,如果可能的话,我尝试在不将其更改为最新格式的情况下执行此操作R 如何以正确的日期顺序绘制此数据?,r,ggplot2,R,Ggplot2,我有这样一个数据框(按日期顺序): 但是,当我用下面的代码绘制时,它不会按数据框中保存的顺序排序。相反,它按字母顺序绘制它们(参见x轴)。如何解决这一问题,以便按照数据框中保存的顺序进行绘图 请注意,日期列的类型可能是字符,这就是原因,但将其更改为日期格式是很棘手的,因为没有日期,当您这样做时,它会更改,例如从6月18日更改为01-1918-06,这在图表上看起来不太好。所以,如果可能的话,我尝试在不将其更改为最新格式的情况下执行此操作 ggplot(df, aes(x = date, y =
ggplot(df, aes(x = date, y = freq)) +
geom_point()
1)假设末尾注释中重复显示的数据,将数据转换为带有yearmon索引的zoo系列(可以表示没有日期的年份和月份),在这种情况下,可以直接使用autoplot.zoo
。如果需要线图,请省略geom参数
library(ggplot2)
library(zoo)
z <- read.zoo(df, index = "date", FUN = as.yearmon, format = "%b-%y")
autoplot(z, geom = "point") + scale_x_yearmon()
注
行1)假设末尾注释中重复显示的数据,将数据转换为带有yearmon索引的zoo系列(可以表示没有日期的年份和月份),在这种情况下,可以直接使用autoplot.zoo
。如果需要线图,请省略geom参数
library(ggplot2)
library(zoo)
z <- read.zoo(df, index = "date", FUN = as.yearmon, format = "%b-%y")
autoplot(z, geom = "point") + scale_x_yearmon()
注
行另一种方式,如果数据如示例所示,则可以是:
library(dplyr)
#Code
df %>%
mutate(date=factor(date,levels = unique(date),ordered = T)) %>%
ggplot(aes(x=date,y=freq))+
geom_point()
输出:
或格式化日期变量:
#Code2
df %>%
mutate(date=as.Date(paste0(date,'-01'),'%b-%y-%d')) %>%
ggplot(aes(x=date,y=freq))+
geom_point()+
scale_x_date(date_labels = '%b-%y')+
ggtitle('My title')
输出:
使用的一些数据:
#Data
structure(list(freq = c(3L, 2L, 42L, 2L, 4L), date = c("Jan-18",
"Feb-18", "Mar-18", "Apr-18", "May-18")), class = "data.frame", row.names = c(NA,
-5L))
另一种方式,如果数据如示例所示,可以是:
library(dplyr)
#Code
df %>%
mutate(date=factor(date,levels = unique(date),ordered = T)) %>%
ggplot(aes(x=date,y=freq))+
geom_point()
输出:
或格式化日期变量:
#Code2
df %>%
mutate(date=as.Date(paste0(date,'-01'),'%b-%y-%d')) %>%
ggplot(aes(x=date,y=freq))+
geom_point()+
scale_x_date(date_labels = '%b-%y')+
ggtitle('My title')
输出:
使用的一些数据:
#Data
structure(list(freq = c(3L, 2L, 42L, 2L, 4L), date = c("Jan-18",
"Feb-18", "Mar-18", "Apr-18", "May-18")), class = "data.frame", row.names = c(NA,
-5L))
如果您不想依赖zoo软件包,只需选择一年(例如2021年),示例中日期列的转换就可以了。然后,可以指定日期在ggplot2的scale\u x\u date()
中的显示方式
库(ggplot2)
df如果您不想依赖zoo软件包,您可以简单地选择一年(例如2021年),并且示例中日期列的转换工作正常。然后,可以指定日期在ggplot2的scale\u x\u date()
中的显示方式
库(ggplot2)
df也值得检查R/ggplot是如何看到的。使用class(df$date)
确保它将列视为日期。如有必要,使用lubridate包转换为正确的类。还值得检查R/ggplot是如何看到它的。使用class(df$date)
确保它将列视为日期。如果需要,请使用lubridate包转换为正确的类。谢谢,这很有效!我以前没用过zoo-你知道在ggplot中是否可以编辑这个吗?如更改标题等?将+ggtitle(“我的系列”)
附加到autoplot
或ggplot
行的末尾。谢谢,这很有效!我以前没用过zoo-你知道在ggplot中是否可以编辑这个吗?如更改标题等?将+ggtitle(“我的系列”)
附加到autoplot
或ggplot
行的末尾。谢谢!对于第一个解决方案,如果我尝试使用geom_line()
而不是geom_point()
,则数据不会显示在图形上。你知道为什么/如何修复吗?@HelpNeeded4你好,亲爱的,我测试并使用geom_线,请尝试此geom_线(aes(group=1))
Perfect,谢谢-此操作有效。group=1表示兴趣的是什么?@HelpNeeded4该选项创建拟合,因此只有一行,这还取决于您正在绘制的数据!非常感谢。对于第一个解决方案,如果我尝试使用geom_line()
而不是geom_point()
,则数据不会显示在图形上。你知道为什么/如何修复吗?@HelpNeeded4你好,亲爱的,我测试并使用geom_线,请尝试此geom_线(aes(group=1))
Perfect,谢谢-此操作有效。group=1表示兴趣的是什么?@HelpNeeded4该选项创建拟合,因此只有一行,这还取决于您正在绘制的数据!