[英]geom_line with x-axis in order of appearance
这是我在这里发布的第一个问题,如果我没有立即提供所有信息,请原谅。
我正在尝试用两条线构建折线图:
y1 <- c(1000,1500,1000,1500,2000,3000,4000)
y2 <- c(1100,1400,900,1500,2000,2500,3500)
x <- c(49,50,51,1,2,49,50)
df <- data.frame(y1,y2,x)
想象 x 是日历周,我跳过了第二年 3 到 48 之间的周。 现在我想构建一个折线图,按此顺序显示 x 轴值(时间序列)。
首先,我尝试了一个非常简单的方法:
p <- ggplot()
p <- p + geom_line(data=df,aes(x=x,y=y1))
p <- p + geom_line(data=df,aes(x=x,y=y2), color = "red")
p
问题:R 对 x 值进行排序,并对相同的周数求和。
然后我尝试更改 x 值以使其唯一,例如 49/19,50/19,但 R 仍会更改顺序。 如果我使用 geom_path 而不是 geom_line,也会发生同样的情况。
然后我尝试将 x 更改为一个因子并使用 x_scale_discrete,但我不知道该怎么做,线条或 x 标签总是丢失。
我希望你能给我一些建议。
非常感谢,
安德烈
您可以将年份的前缀添加到您的 x 值,然后我们使用 stringr 中的stringr
str_pad()
将其填充为零,以便它们从 01 一直排序到 52:
library(tidyr)
library(stringr)
library(ggplot2)
df$week = paste(rep(c("2019","2020"),c(3,4)),
str_pad(df$x,2,pad="0"),sep="_")
pivot这么长,让我们得到一个图例:
pivot_longer(df[,c("week","y1","y2")],-week)
# A tibble: 14 x 3
week name value
<chr> <chr> <dbl>
1 2019_49 y1 1000
2 2019_49 y2 1100
3 2019_50 y1 1500
4 2019_50 y2 1400
5 2019_51 y1 1000
6 2019_51 y2 900
7 2020_01 y1 1500
8 2020_01 y2 1500
9 2020_02 y1 2000
然后直接在ggplot中使用这个
ggplot(pivot_longer(df[,c("week","y1","y2")],-week),
aes(x=week,y=value,group=name,col=name)) +
geom_line() + scale_color_manual(values=c("black","red"))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.