如何在ggplot2中将a轴更改为时间序列

如何解决如何在ggplot2中将a轴更改为时间序列

我正在尝试复制 https://www.chicagofed.org/research/data/cfnai/current-data 中提供的图表,因为我很快就会需要类似这样的数据集图表。我快到了,我似乎无法弄清楚使用 ggplot2 时如何将 x 轴更改为日期。具体来说,我想将其更改为日期列中的日期。我尝试了十几种方法,但没有任何效果。此图表的数据位于网站上的索引下。这是我的代码和图表,其中 dataSet 是来自网站的数据:

library(ggplot2) 
library(reshape2) 
library(tidyverse) 
library(lubridate) 
df = data.frame(time = index(dataSet),melt(as.data.frame(dataSet)))
df
str(df)
df$data1.Date = as.Date(as.character(df$data1.Date))
str(df)
replicaPlot1 = ggplot(df,aes(x = time,y = value)) + 
  geom_area(aes(colour = variable,fill = variable)) +
  stat_summary(fun = sum,geom = "line",size = 0.4) +
  labs(title = "Chicago Fed National Activity Index (CFNAI) Current Data")
replicaPlot1 + scale_x_continuous(name = "time",breaks = waiver(),labels = waiver(),limits = 
df$data1.Date)
replicaPlot1

非常感谢您对此的任何帮助!

G:\BOS\Common\R-Projects\Graphs\Replica of Chicago Fed National Acitivty index (PCA)\dataSet

解决方法

不确定您对 data.frame(time = index(dataSet),melt(as.data.frame(dataSet))) 的意图。当我下载数据并通过 readxl::read_excel 读取时,我得到了一个带有日期(时间)列的漂亮小标题,通过 tidyr::pivot_longer 重新整形后可以很容易地绘制,并且通过使用 scale_x_datetime 有一个格式良好的日期轴:

仅使用前 20 行数据试试这个:

library(ggplot2)
library(readxl)
library(tidyr)

df <- pivot_longer(df,-Date,names_to = "variable")

ggplot(df,aes(x = Date,y = value)) +
  geom_area(aes(colour = variable,fill = variable)) +
  stat_summary(fun = sum,geom = "line",size = 0.4) +
  labs(title = "Chicago Fed National Activity Index (CFNAI) Current Data") +
  scale_x_datetime(name = "time")
#> Warning: Removed 4 rows containing non-finite values (stat_summary).
#> Warning: Removed 4 rows containing missing values (position_stack).

reprex package (v1.0.0) 于 2021 年 1 月 28 日创建

数据

# Data downloaded from https://www.chicagofed.org/~/media/publications/cfnai/cfnai-data-series-xlsx.xlsx?la=en

# df <- readxl::read_excel("cfnai-data-series-xlsx.xlsx")

# dput(head(df,20))
df <- structure(list(Date = structure(c(
  -87004800,-84412800,-81734400,-79142400,-76464000,-73785600,-71193600,-68515200,-65923200,-63244800,-60566400,-58060800,-55382400,-52790400,-50112000,-47520000,-44841600,-42163200,-39571200,-36892800
),tzone = "UTC",class = c(
  "POSIXct","POSIXt"
)),P_I = c(
  -0.26,0.16,-0.43,-0.09,-0.19,0.58,-0.05,0.21,0.51,0.33,-0.1,0.12,0.07,0.04,0.35,0.14,0.05,0.11
),EU_H = c(
  -0.06,0.01,0.1,0.22,-0.04,0.32,-0.2,0.34,0.06,0.17,0.15,0.18
),C_H = c(
  -0.01,0.08,-0.07,-0.01,-0.11,-0.03,0.09,-0.06,0.09
),SO_I = c(
  -0.01,-0.08,0.02,-0.16,0.38,-0.13,-0.3,0.14
),CFNAI = c(
  -0.34,-0.55,-0.32,1,0.03,1.32,0.97,-0.46,0.39,0.11,0.63,0.25,0.49,0.52
),CFNAI_MA3 = c(
  NA,NA,-0.29,-0.17,-0.28,0.24,0.43,0.77,0.61,0.3,0.29,0.37,0.34
),DIFFUSION = c(
  NA,-0.14,-0.21,0.2,0.5,0.41,0.28,0.36,0.31,0.47
)),row.names = c(NA,-20L),class = c(
  "tbl_df","tbl","data.frame"
))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?