[英]How do I add a legend to a ggplot with multiple groups that have multiple columns of data in a dataframe
我有一個 60x13 dataframe 包含 4 組數據,1 列是 1-60 個月的時間,1 列是時間點 n 的中值,2 是時間點 n 的可信區間。 我想生成一個 plot,隨着時間的推移,中位數為實線,置信區間為虛線,我已經能夠通過將每列添加為自己的 geom_line 並通過匹配中位數的顏色手動分組來實現以及它們相應的可信區間,但是,我無法添加圖例。 任何幫助將不勝感激。
ggplot(data=data1,
aes(x=month)) +
xlab("Month") +
ylab("Hazard Ratio") +
theme(plot.title = element_text(hjust = 0.5)) +
geom_line(aes(y=median),
color = "#4682B4",
size = 1) +
geom_line(aes(y=ucrd),
color = "#4682B4",
linetype=2,
size = 0.9,
alpha=0.5) +
geom_line(aes(y=lcrd),
color = "#4682B4",
linetype=2,
size = 0.9,
alpha=0.5) +
geom_line(aes(y=median.1),
color = "#4BB446",
size = 1) +
geom_line(aes(y=ucrd.1),
color = "#4BB446",
linetype=2,
size = 0.9,
alpha=0.5) +
geom_line(aes(y=lcrd.1),
color = "#4BB446",
linetype=2,
size = 0.9,
alpha=0.5) +
geom_line(aes(y=median.2),
color = "#AF46B4",
size = 1) +
geom_line(aes(y=ucrd.2),
color = "#AF46B4",
linetype=2,
size = 0.9,
alpha=0.5) +
geom_line(aes(y=lcrd.2),
color = "#AF46B4",
linetype=2,
size = 0.9,
alpha=0.5) +
geom_line(aes(y=median.3),
color = "#B47846",
size = 1) +
geom_line(aes(y=ucrd.3),
color = "#B47846",
linetype=2,
size = 0.9,
alpha=0.5) +
geom_line(aes(y=lcrd.3),
color = "#B47846",
linetype=2,
size = 0.9,
alpha=0.5)
scale_color_manual(name= "Treament",
values=c("4682B4", "4BB446", "AF46B4", "B47846"),
labels=c("a",
"b",
"c",
"d"
))
這聽起來很像數據形狀問題。 由於沒有提供數據,這里是一個帶有虛擬數據的示例。 首先,我們生成一些大致與您在文本中提到的形狀相同的數據。
library(tidyr)
library(ggplot2)
n <- 60
df <- data.frame(
time = seq_len(n),
group1_median = rnorm(n),
group1_low = rnorm(n, -2),
group1_high = rnorm(n, 2),
group2_median = rnorm(n),
group2_low = rnorm(n, -2),
group2_high = rnorm(n, 2),
group3_median = rnorm(n),
group3_low = rnorm(n, -2),
group3_high = rnorm(n, 2),
group4_median = rnorm(n),
group4_low = rnorm(n, -2),
group4_high = rnorm(n, 2)
)
現在,我們將把它從寬格式重塑為長格式。 下面的 function 應該是什么樣子在很大程度上取決於數據的列名。 我選擇虛擬數據列名稱非常簡單。
df <- pivot_longer(
df, -time,
names_to = c("group", "metric"),
names_sep = "_"
)
因為median
、 low
和high
現在被視為單獨的觀察值,我們需要再次重塑數據以使其稍微寬一些。
df <- pivot_wider(
df, names_from = "metric"
)
然后將它放入ggplot2中的形狀相當不錯,傳奇將自行解決。
ggplot(df, aes(time, colour = group)) +
geom_line(aes(y = median)) +
geom_ribbon(aes(ymin = low, ymax = high),
linetype = 2, fill = NA)
如果有人有更合適的重塑策略,我很想聽聽他們,因為我還在正確地學習 pivot。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.