Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何以正确的日期顺序绘制此数据?_R_Ggplot2 - Fatal编程技术网

R 如何以正确的日期顺序绘制此数据?

R 如何以正确的日期顺序绘制此数据?,r,ggplot2,R,Ggplot2,我有这样一个数据框(按日期顺序): 但是,当我用下面的代码绘制时,它不会按数据框中保存的顺序排序。相反,它按字母顺序绘制它们(参见x轴)。如何解决这一问题,以便按照数据框中保存的顺序进行绘图 请注意,日期列的类型可能是字符,这就是原因,但将其更改为日期格式是很棘手的,因为没有日期,当您这样做时,它会更改,例如从6月18日更改为01-1918-06,这在图表上看起来不太好。所以,如果可能的话,我尝试在不将其更改为最新格式的情况下执行此操作 ggplot(df, aes(x = date, y =

我有这样一个数据框(按日期顺序):

但是,当我用下面的代码绘制时,它不会按数据框中保存的顺序排序。相反,它按字母顺序绘制它们(参见x轴)。如何解决这一问题,以便按照数据框中保存的顺序进行绘图

请注意,日期列的类型可能是字符,这就是原因,但将其更改为日期格式是很棘手的,因为没有日期,当您这样做时,它会更改,例如从6月18日更改为01-1918-06,这在图表上看起来不太好。所以,如果可能的话,我尝试在不将其更改为最新格式的情况下执行此操作

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该选项创建拟合,因此只有一行,这还取决于您正在绘制的数据!