我正在嘗試在下面的圖中格式化圖例。這是一些虛擬資料和我的代碼:
df <- data.frame(supplement = c("Control",
"0.5 mM NA", "5 mM NA", "10 mM NA",
"0.5 mM NI", "5 mM NAI", "10 mM NI"),
axis1 = c(1, 2, 3, 4, 5, 6, 7),
axis2 = c(7, 6, 5, 4, 3, 2, 1))
df %>%
mutate(supplement = factor(supplement,
levels = c("Control",
"0.5 mM NA", "5 mM NA", "10 mM NA",
"0.5 mM NI", "5 mM NAI", "10 mM NI"))) %>%
ggplot(aes(x = axis1, y = axis2))
geom_point(aes(color = supplement), size = 4)
labs(y = "Axis 2",
x = "Axis 1")
scale_colour_manual(name = "",
breaks = c("Control",
"0.5 mM NA", "5 mM NA", "10 mM NA",
"0.5 mM NI", "5 mM NAI", "10 mM NI"),
labels = c("No Treatment",
"0.5 mM Nitrate", "5 mM Nitrate", "10 mM Nitrate",
"0.5 mM Nitrite", "5 mM Nitrite", "10 mM Nitrite"),
values = c("#003F5C",
"#824ED4", "#31B3F7", "#FFA600",
"#ABF13D", "#DC267F", "#16F5E3"))
guides(color = guide_legend(order = 1, nrow = 2, byrow = TRUE))
theme(legend.title = element_blank(),
legend.text = element_text(size = unit(14, "pt")),
legend.position = "bottom",
legend.box = "vertical",
axis.title = element_text(size = unit(16, "pt")),
axis.text = element_text(size = unit(14, "pt")),
legend.key.size = unit(25, "pt"),
legend.key.width = unit(0, 'mm'))
我得到的是這個。

但我真的很希望他們是這樣的。但是我不知道這在 ggplot 中是否可行,因為我還沒有找到任何可以做到這一點的東西。

uj5u.com熱心網友回復:
如果您可以擺脫傳說中的關鍵背景,那么一種選擇是
- 進入
ncols=3_guide_legend - 為您的因素添加兩個額外的類別 為圖例添加兩個額外的插槽或鍵
- 將這些類別的標簽設定為空字串,顏色等于繪圖背景顏色
- 另外我們必須設定
drop=FALSE為scale_color_manual這樣這些未使用的類別不會被丟棄
library(ggplot2)
library(dplyr)
df <- df %>%
mutate(supplement = factor(supplement,
levels = c("Control", "foo", "bar",
"0.5 mM NA", "5 mM NA", "10 mM NA",
"0.5 mM NI", "5 mM NAI", "10 mM NI")))
ggplot(df, aes(x = axis1, y = axis2))
geom_point(aes(color = supplement), size = 4)
labs(y = "Axis 2", x = "Axis 1")
scale_colour_manual(name = "",
breaks = c("Control", "foo", "bar",
"0.5 mM NA", "5 mM NA", "10 mM NA",
"0.5 mM NI", "5 mM NAI", "10 mM NI"),
labels = c("No Treatment", "", "",
"0.5 mM Nitrate", "5 mM Nitrate", "10 mM Nitrate",
"0.5 mM Nitrite", "5 mM Nitrite", "10 mM Nitrite"),
values = c("#003F5C", "white", "white",
"#824ED4", "#31B3F7", "#FFA600",
"#ABF13D", "#DC267F", "#16F5E3"),
drop = FALSE)
guides(color = guide_legend(order = 1, ncol = 3, byrow = TRUE))
theme(legend.title = element_blank(),
legend.text = element_text(size = unit(14, "pt")),
legend.position = "bottom",
legend.box = "vertical",
legend.key = element_rect(fill = NA),
axis.title = element_text(size = unit(16, "pt")),
axis.text = element_text(size = unit(14, "pt")),
legend.key.size = unit(25, "pt"),
legend.key.width = unit(0, 'mm'))

uj5u.com熱心網友回復:
我不知道有任何(非復雜)方法可以在單獨的行上拉出一個特定的圖例鍵,但在這種情況下,由于圖例中有 7 個專案,您可以將“不處理”分開通過將指南限制為 3 列并重新排序scale_color_manual()以將控制元件放在最后。
在這種情況下,您的繪圖代碼部分將更改為:
# ... original plot code...
scale_colour_manual(name = "",
breaks = c(
"0.5 mM NA", "5 mM NA", "10 mM NA",
"0.5 mM NI", "5 mM NAI", "10 mM NI", "Control"),
labels = c(
"0.5 mM Nitrate", "5 mM Nitrate", "10 mM Nitrate",
"0.5 mM Nitrite", "5 mM Nitrite", "10 mM Nitrite", "No Treatment"),
values = c(
"#824ED4", "#31B3F7", "#FFA600",
"#ABF13D", "#DC267F", "#16F5E3", "#003F5C"))
guides(color = guide_legend(order = 1, ncol = 3, byrow = TRUE))
# ... remaining plot code

另一種方法是使用您的原始代碼,并將圖例放在圖的右側或左側。為此,請洗掉guides(...)line 和legend.position=theme 元素,因為默認放置在右側。

轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/420135.html
標籤:
上一篇:如何選擇列中最常見的值
下一篇:R中的另一列最大值得到另一列值
