Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.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图表上的多条线_R_Charts_Line - Fatal编程技术网

R图表上的多条线

R图表上的多条线,r,charts,line,R,Charts,Line,我试图在折线图上放置3列。 但是,虽然我可以创建图表,但绘制的线条并不正确 下面是一些数据和我尝试创建图表的两种不同方法 任何帮助都是巨大的;我很感激你 数据: 方式1: ggplot(Mth_TaT_Data, aes(x=Year, group = "BR")) + geom_line(aes(y = P.Less.3), color = "darkred") + geom_line(aes(y = P.Less.7), color=&qu

我试图在折线图上放置3列。 但是,虽然我可以创建图表,但绘制的线条并不正确

下面是一些数据和我尝试创建图表的两种不同方法

任何帮助都是巨大的;我很感激你

数据:

方式1:

ggplot(Mth_TaT_Data, aes(x=Year, group = "BR")) + 
  geom_line(aes(y = P.Less.3), color = "darkred") + 
  geom_line(aes(y = P.Less.7), color="steelblue", linetype="twodash")+ 
  geom_line(aes(y = P.Less.10), color="sienna1", linetype="dashed")+
  ggtitle("Test")+
  theme(axis.text.x = element_text(angle=45, hjust = 1))
方式2:

df <- Mth_TaT_Data %>%
  select(Year, Order.Comment.1,P.Less.3, P.Less.7, P.Less.10) %>%
  gather(key = "variable", value = "value", -Year, -Order.Comment.1)

ggplot(df, aes(x = Year, y = value,group = "BR")) + 
  geom_line(aes(color = variable))+
ggtitle("Test")+
  theme(axis.text.x = element_text(angle=45, hjust = 1))
df%
选择(年份、顺序、注释1、P.Less.3、P.Less.7、P.Less.10)%>%
收集(key=“variable”、value=“value”、-Year、-Order.Comment.1)
ggplot(df,aes(x=年,y=值,group=“BR”))+
几何图形线(aes(颜色=变量))+
标题(“测试”)+
主题(axis.text.x=元素\文本(角度=45,hjust=1))

根据我们勇敢的同事们的评论,你想要的东西很奇怪。如果您希望每列一行,那么您在第一个绘图中遵循的策略可能是正确的。也许您希望看到图例中的每一行,因此使用
tidyverse
重塑数据的方法是可行的。代码如下:

library(tidyverse)
#Code
Mth_TaT_Data %>%
  pivot_longer(-c(1,2)) %>%
  mutate(name=factor(name,levels=unique(name),ordered = T)) %>%
  ggplot(aes(x=Year, y=value,group = name,color=name,linetype=name)) + 
  geom_line()+
  scale_color_manual(values=c("darkred","steelblue","sienna1"))+
  scale_linetype_manual(values = c("solid","twodash","dashed"))+
  ggtitle("Test")+
  theme(axis.text.x = element_text(angle=45, hjust = 1))+
  labs(color='Column',linetype='Column')
输出:


这类问题通常与重塑数据有关。格式应该是长格式,数据格式应该是宽格式,就像问题本身显示OP试图以方式2完成的那样。另请参见“如何将数据从宽格式重新调整为长格式”

在下面的代码中,我首先创建三个向量:

  • lvls
    是以
    “P”
    开头的列名向量,用作长格式列
    变量的级别以及创建的其他两个向量的名称
    
  • linetp
    是线型的命名向量
  • colr
    是(线)颜色的命名向量
  • 因此,最后的代码比问题的代码长一点

    library(dplyr)
    library(tidyr)
    library(ggplot2)
    
    lvls <- grep("^P", names(Mth_TaT_Data), value = TRUE)
    linetp <- setNames(c("solid", "twodash", "dashed"), lvls)
    colr <- setNames(c("darkred", "steelblue", "sienna1"), lvls)
    
    
    Mth_TaT_Data %>%
      mutate(Year = paste(Year, "01", sep = "-"),
             Year = zoo::as.yearmon(Year)) %>%
      pivot_longer(
        cols = starts_with('P'),
        names_to = 'variable',
        values_to = 'value'
      ) %>%
      mutate(variable = factor(variable, levels = lvls)) %>%
      ggplot(aes(x = Year, y = value)) + 
      geom_line(aes(linetype = variable, color = variable)) +
      ggtitle("Test") +
      scale_color_manual(values = colr) +
      scale_linetype_manual(values = linetp) +
      theme(axis.text.x = element_text(angle = 45, hjust = 1))
    
    库(dplyr)
    图书馆(tidyr)
    图书馆(GG2)
    lvls%
    突变(变量=因子(变量,级别=LVL))%>%
    ggplot(aes(x=年份,y=值))+
    几何图形线(aes(线型=变量,颜色=变量))+
    标题(“测试”)+
    比例\u颜色\u手册(值=colr)+
    比例\线型\手动(值=linetp)+
    主题(axis.text.x=元素\文本(角度=45,hjust=1))
    

    嗨,詹姆斯!方式1有什么问题?嗨,詹姆斯,你能澄清一下你要求的输出与上面提供的输出有什么不同吗?也许你可以在画图或预览中对其进行模拟?以方式2编写
    group=variable
    而不是
    group=“BR”
    ,它将显示一个类似于方式的图表1@Edo我已经添加了从主数据运行1时的外观(dput只是我正在处理的较大数据的较小版本)@IanCampbell我已经包括了一个图表示例,当我以不适用于我的方式1运行代码时,我会得到以下错误消息“错误:
    mutate()
    input
    Year
    。没有名为“zoo”的包,我输入
    Year
    is
    zoo::as.yearmon(Year)
    “@JamesSlasor尝试
    as.Date
    而不是
    zoo::as.yearmon
    。后者输出年和月的日期(没有天),就像在测试数据集中一样。大量帮助。看起来我需要将我的数据过滤到上面输出中的数据,而不是试图将其硬塞进整个实际数据集中。我收到错误消息“error:manual scale中的值不足”。我认为这与“pivot_longer(-c(1,2))”有关,因为这是删除数据提取的5部分中的第一部分和第二部分。如果我只做一个包含这些列的data.frame,然后运行它,这将是一个好主意。@JamesSlasor嗨,James,这不是删除变量,而是保留变量。您的数据中有15列,因此进行此更改,添加15种颜色,或者尝试使用列示例来测试最初得到的结果!。
    library(dplyr)
    library(tidyr)
    library(ggplot2)
    
    lvls <- grep("^P", names(Mth_TaT_Data), value = TRUE)
    linetp <- setNames(c("solid", "twodash", "dashed"), lvls)
    colr <- setNames(c("darkred", "steelblue", "sienna1"), lvls)
    
    
    Mth_TaT_Data %>%
      mutate(Year = paste(Year, "01", sep = "-"),
             Year = zoo::as.yearmon(Year)) %>%
      pivot_longer(
        cols = starts_with('P'),
        names_to = 'variable',
        values_to = 'value'
      ) %>%
      mutate(variable = factor(variable, levels = lvls)) %>%
      ggplot(aes(x = Year, y = value)) + 
      geom_line(aes(linetype = variable, color = variable)) +
      ggtitle("Test") +
      scale_color_manual(values = colr) +
      scale_linetype_manual(values = linetp) +
      theme(axis.text.x = element_text(angle = 45, hjust = 1))