Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 按外观顺序排列的x轴几何图形线_R_Ggplot2 - Fatal编程技术网

R 按外观顺序排列的x轴几何图形线

R 按外观顺序排列的x轴几何图形线,r,ggplot2,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) y1您可以在x值中添加一个年份前缀,我们使用str_pad()fromstringr将其

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

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

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)

y1您可以在x值中添加一个年份前缀,我们使用
str_pad()
from
stringr
将其填充为零,这样它们将从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

一种方法是用整数序列替换
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")

非常感谢。我用我的数据尝试了你的建议,总的来说是有效的,但我再次遇到了x轴顺序的问题。在我提供的数据示例中不会出现这种情况,但只要您有像2020_6这样的值,它们就会被放置在轴上2020_50之后。有什么方法可以覆盖这个排序吗?@setX,我已经更新了答案。基本上,当数字是1个字符时,在数字前面加上一个零,所以在5之前加上05,它会被正确排序。我尝试了你的方法,效果也很好。非常感谢。
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"))
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")