R 时间序列数据的折线图,x轴上有月标签,y轴上有日数据

R 时间序列数据的折线图,x轴上有月标签,y轴上有日数据,r,ggplot2,plot,R,Ggplot2,Plot,我有以下数据: library(dplyr) set.seed(122) df <- as_tibble(rlnorm(1260, meanlog = 0.06, sdlog = 0.20)) date <- rep(c("Jan", "Feb", "Mär", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"), 5) 但是,通过插入值为1的新第一行,我稍微更改了我的df df

我有以下数据:

library(dplyr)
    set.seed(122)
    df <- as_tibble(rlnorm(1260, meanlog = 0.06, sdlog = 0.20))
date <- rep(c("Jan", "Feb", "Mär", "Apr", "Mai", "Jun", 
      "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"), 5)
但是,通过插入值为
1
的新第一行,我稍微更改了我的
df

df <- rbind(df[0,],c(1),df[1:nrow(df),])
df
library(tidyverse)
df%>%
as.data.frame()%>%
重命名(价格=1)%>%
突变(RNAME=行名(%)%%>%
ggplot(aes(x=as.numeric(rnames)-1,y=price,
组=c(1,重复(1:5,次数=1,每个=252)))+
geom_线()+
实验室(title=“股价图”,y=“价格”,x=“日期”)+
比例x连续(中断=顺序(11260,按=21),标签=日期)
还可以为点
0
添加新断点。通过像这样更改
scale\ux

scale_x_continuous(breaks = c(0, seq(1, 1260, by = 21)), labels = c("t=0", date))
如果您仍然希望
price==1
(您的新行)的数据点标记为
Jan
,那么您不需要在美学中从
x
中减去
1
,也不需要操纵中断。这两种方法都有效


要使我以前的代码与新数据帧配合使用,最重要的是将美学中的
更改为与新数据帧相同的大小

我这样做了:
df我们没有
df[0,]
。这是我运行您的代码时得到的结果:
df[0]中的错误:维度数不正确
sorry
df查看我的编辑。您需要显示所有这些内容,并确保其格式正确。你的问题应该是可复制的、最少的、易读的(格式很好)。此外,你应该在问题主体中提供大部分信息,而不是评论。这就是我添加它们的原因。阅读这篇关于一个可复制的例子的文章:。。。我会很快发布答案。谢谢你的帮助。我将在将来发布更好的示例。我刚刚用
scale\u x\u continuous(breaks=seq(11260,by=21),labels=date,expand=c(0,0))
移除了左右两侧的填充物。但是,现在我看到第一个y值“1”开始于x轴之外。我希望它位于第一个x值“Jan”上。这有可能吗?为了进一步澄清:第一个y值应该对应于1月1日,而最后一个y值应该对应于12月31日(在我的示例中为12月21日,因为月份只有21天)@JjBlevins正如我在回答中所述,只需在
ggplot
aes
中去掉
-1
,这样行就可以是
ggplot(aes(x=as.numeric(rnames),y=price,
…其余部分保持在我答案的顶部(完整解决方案),您只需将
,expand=c(0,0)
添加到
scale\u x
函数中。我在回答中说:如果您仍然想要price==1的数据点(您的新行)如果标记为1月,那么你不需要从美学中的x中减去1,你的休息也不需要被操纵。要清楚,现在你有(1261个数据点)等于(5年*12个月*21天+1天)@JjBlevins这是因为分组。@JjBlevins根本不在你的
aes
中使用
group
;意思是,去掉
group=c(1,rep(1:5,times=1,each=252))