r - 带有 x 轴的 geom_line 按出现顺序排列

标签 r ggplot2

这是我在这里发布的第一个问题,所以如果我没有立即提供所有信息,请原谅。

我正在尝试用两条线构建折线图:

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 中的 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_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"))

enter image description here

关于r - 带有 x 轴的 geom_line 按出现顺序排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62153524/

相关文章:

R Shiny : How to pass renderUI output to chocies parameter in Selectinput

r - 在 R 中构建嵌套列表

r - 如何在不绘制原始数据的情况下向 ggplot 添加图例?

r - ggplot2:使用grid.arrange()作为do.call()的参数定义图版面

r - 如何拆分列并从中创建关系?

r - 为 ggplot 气泡图创建同心圆图例

r - R中多列的值计数

r - 漂亮的五组维恩图

r - 尝试将 NetCDF 导入 R 时出错

r - 绘制ggmap时在ggplot2中添加geom_text时出现问题