[英]R Multiple Lines on a Chart
我正在尝试将 3 列放在折线图上。 但是,虽然我可以创建图表,但线条绘制不正确。
下面是一些数据和我尝试创建图表的两种不同方式。
任何帮助都很棒;你很感激。
数据:
structure(list(Year = c("2017-08", "2017-09", "2017-10", "2017-11",
"2017-12", "2018-01", "2018-02", "2018-03", "2018-04", "2018-05",
"2018-06", "2018-07", "2018-08", "2018-09", "2018-10", "2018-11",
"2018-12", "2019-01", "2019-02", "2019-03", "2019-04", "2019-05",
"2019-06", "2019-07", "2019-08", "2019-09", "2019-10", "2019-11",
"2019-12", "2020-01", "2020-02", "2020-03", "2020-04", "2020-05",
"2020-06", "2020-07", "2020-08"), Order.Comment.1 = structure(c(2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L), .Label = c("", "BR", "BST", "CG", "CN", "CT",
"DM", "DR", "EM", "EMR", "EMURG", "ENDOC", "EYE", "FF", "GI",
"GYN", "GYNAE", "HAEM", "HN", "ICC", "LBX", "LYMPH", "MN", "MOHS",
"NEUR", "NEURO", "NO REPORT ISSUED", "PAED", "PAEDGI", "PERI",
"PG", "RE", "SK", "TEST PATIENT", "UGI", "UR", "URGI"), class = "factor"),
P.Less.3 = c(50.8250825082508, 53.7906137184115, 54.8172757475083,
47.6190476190476, 51.8939393939394, 56.508875739645, 52.2900763358779,
49.3421052631579, 43.3447098976109, 50.4918032786885, 50.1501501501502,
49.7206703910614, 47.5409836065574, 46.0264900662252, 45.6896551724138,
47.2312703583062, 44.3965517241379, 57.8313253012048, 49.8098859315589,
48.6013986013986, 49.0566037735849, 45.3531598513011, 49.063670411985,
53.8961038961039, 50, 43.5810810810811, 45, 47.3509933774834,
43.4782608695652, 39.041095890411, 36.9649805447471, 43.2515337423313,
39.5522388059701, 54.6875, 46.2765957446808, 36.1990950226244,
40.7216494845361), P.Less.7 = c(87.7887788778878, 89.1696750902527,
89.0365448504983, 88.8888888888889, 87.8787878787879, 92.603550295858,
89.6946564885496, 87.8289473684211, 84.641638225256, 83.6065573770492,
83.1831831831832, 87.1508379888268, 89.0710382513661, 79.8013245033112,
79.3103448275862, 83.3876221498371, 81.0344827586207, 87.9518072289157,
82.8897338403042, 87.0629370629371, 81.8867924528302, 86.2453531598513,
82.7715355805243, 88.961038961039, 87.1428571428571, 83.7837837837838,
83.8888888888889, 84.1059602649007, 78.9855072463768, 84.5890410958904,
84.4357976653696, 84.6625766871166, 84.3283582089552, 91.40625,
79.7872340425532, 76.9230769230769, 72.680412371134), P.Less.10 = c(97.3597359735974,
97.4729241877256, 99.3355481727575, 98.4126984126984, 96.2121212121212,
98.5207100591716, 97.3282442748092, 97.3684210526316, 96.5870307167236,
94.0983606557377, 96.0960960960961, 96.3687150837989, 96.9945355191257,
92.3841059602649, 92.2413793103448, 95.4397394136808, 93.5344827586207,
95.1807228915663, 95.0570342205323, 97.9020979020979, 94.7169811320755,
95.1672862453532, 94.0074906367041, 95.7792207792208, 96.4285714285714,
95.6081081081081, 94.7222222222222, 95.364238410596, 93.8405797101449,
95.8904109589041, 95.7198443579767, 96.9325153374233, 94.7761194029851,
96.875, 95.2127659574468, 92.3076923076923, 85.0515463917526
)), row.names = c(NA, 37L), class = "data.frame")
方式一:
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))
方式二:
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))
根据我们优秀同事的评论,您想要的东西很奇怪。 如果你想要每列一行,你在第一个图中遵循的策略可能是正确的。 也许您想查看图例中的每一行,因此使用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"
开头的列名称向量,用作长格式列variable
的级别以及创建的其他两个向量的名称;linetp
是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))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.