R图表上的多条线
我试图在折线图上放置3列。 但是,虽然我可以创建图表,但绘制的线条并不正确 下面是一些数据和我尝试创建图表的两种不同方法 任何帮助都是巨大的;我很感激你 数据: 方式1: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
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()
inputYear
。没有名为“zoo”的包,我输入Year
iszoo::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))