簡體   English   中英

geom_line 與 x 軸按出現順序

[英]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"))

在此處輸入圖像描述

一種方法是將x替換為整數序列,然后應用 x 軸標簽。

library(ggplot2)
ggplot(data = df, aes(x = seq(1,nrow(df)))) + 
  geom_line(aes(y=y1)) + 
  geom_line(aes(y=y2), color = "red") + 
  scale_x_continuous(breaks = seq(1,nrow(df)),
                     labels = as.character(df$x)) + 
  labs(x = "Week")

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM