在 ggplot2 中重新排序颜色和图案图例
Reorder color and pattern legends in ggplot2
我使用下面的代码。
右边图例的顺序是city
、split
。如何将顺序反转为 split
、city
?我尝试在 guides()
中使用顺序,但这不起作用。如何解决?
library(ggplot2)
library(ggpattern)
df <- data.frame(
no = c(rep("6", 3), "7", rep("8", 6), rep("9", 17), rep("10", 12), rep("11", 21)),
city = c(rep("Madrid", 47), rep("New York", 13)),
split = c(rep("blue", 3), rep("blue", 1), rep("blue", 4), rep("red", 2),
rep("blue", 2), rep("red", 15), rep("blue", 4), rep("red", 8),
rep("blue", 1), rep("red", 7), rep("blue", 2), rep("red", 11)))
ggplot(data = df, aes(x = no, fill = city, pattern = split)) +
geom_bar_pattern(
color = "black",
pattern_fill = "black",
pattern_angle = 45,
pattern_density = 0.1,
pattern_spacing = 0.01,
pattern_key_scale_factor = 0.6) +
scale_pattern_manual(values = c(blue = "stripe", red = "none")) +
guides(pattern = guide_legend(override.aes = list(fill = "white")),
fill = guide_legend(override.aes = list(pattern = "none", order=1), # this line is incorrect?
pattern = guide_legend(order = 0) # or this line is incorrect?
))
我对 guides()
的轻微更改导致 split
在图例中显示在 city
上方。请注意 order
中的差异。没有order = 0
.
library(ggplot2)
library(ggpattern)
df <- data.frame(
no = c(rep("6", 3), "7", rep("8", 6), rep("9", 17), rep("10", 12), rep("11", 21)),
city = c(rep("Madrid", 47), rep("New York", 13)),
split = c(rep("blue", 3), rep("blue", 1), rep("blue", 4), rep("red", 2),
rep("blue", 2), rep("red", 15), rep("blue", 4), rep("red", 8),
rep("blue", 1), rep("red", 7), rep("blue", 2), rep("red", 11)))
ggplot(data = df, aes(x = no, fill = city, pattern = split)) +
geom_bar_pattern(
color = "black",
pattern_fill = "black",
pattern_angle = 45,
pattern_density = 0.1,
pattern_spacing = 0.01,
pattern_key_scale_factor = 0.6) +
scale_pattern_manual(values = c(blue = "stripe", red = "none")) +
guides(pattern = guide_legend(override.aes = list(fill = "white"), order = 2),
fill = guide_legend(override.aes = list(pattern = "none", order=1)
))
由 reprex package (v0.3.0)
于 2021 年 3 月 14 日创建
以防万一您决定要对图中的条重新排序
df <- data.frame(
no = c(rep("6", 3), "7", rep("8", 6), rep("9", 17), rep("10", 12), rep("11", 21)),
city = c(rep("Madrid", 47), rep("New York", 13)),
split = c(rep("blue", 3), rep("blue", 1), rep("blue", 4), rep("red", 2),
rep("blue", 2), rep("red", 15), rep("blue", 4), rep("red", 8),
rep("blue", 1), rep("red", 7), rep("blue", 2), rep("red", 11)))
df1 <- df %>%
group_by(no) %>%
mutate(
count_no_freq = n()
)
ggplot(data = df1, aes(x = reorder(no, -count_no_freq), fill = city, pattern = split)) +
geom_bar_pattern(
color = "black",
pattern_fill = "black",
pattern_angle = 45,
pattern_density = 0.1,
pattern_spacing = 0.01,
pattern_key_scale_factor = 0.6) +
scale_pattern_manual(values = c(blue = "stripe", red = "none")) +
guides(pattern = guide_legend(override.aes = list(fill = "white"), order = 2),
fill = guide_legend(override.aes = list(pattern = "none", order=1)
))
由 reprex package (v0.3.0)
于 2021 年 3 月 14 日创建
我使用下面的代码。
右边图例的顺序是city
、split
。如何将顺序反转为 split
、city
?我尝试在 guides()
中使用顺序,但这不起作用。如何解决?
library(ggplot2)
library(ggpattern)
df <- data.frame(
no = c(rep("6", 3), "7", rep("8", 6), rep("9", 17), rep("10", 12), rep("11", 21)),
city = c(rep("Madrid", 47), rep("New York", 13)),
split = c(rep("blue", 3), rep("blue", 1), rep("blue", 4), rep("red", 2),
rep("blue", 2), rep("red", 15), rep("blue", 4), rep("red", 8),
rep("blue", 1), rep("red", 7), rep("blue", 2), rep("red", 11)))
ggplot(data = df, aes(x = no, fill = city, pattern = split)) +
geom_bar_pattern(
color = "black",
pattern_fill = "black",
pattern_angle = 45,
pattern_density = 0.1,
pattern_spacing = 0.01,
pattern_key_scale_factor = 0.6) +
scale_pattern_manual(values = c(blue = "stripe", red = "none")) +
guides(pattern = guide_legend(override.aes = list(fill = "white")),
fill = guide_legend(override.aes = list(pattern = "none", order=1), # this line is incorrect?
pattern = guide_legend(order = 0) # or this line is incorrect?
))
我对 guides()
的轻微更改导致 split
在图例中显示在 city
上方。请注意 order
中的差异。没有order = 0
.
library(ggplot2)
library(ggpattern)
df <- data.frame(
no = c(rep("6", 3), "7", rep("8", 6), rep("9", 17), rep("10", 12), rep("11", 21)),
city = c(rep("Madrid", 47), rep("New York", 13)),
split = c(rep("blue", 3), rep("blue", 1), rep("blue", 4), rep("red", 2),
rep("blue", 2), rep("red", 15), rep("blue", 4), rep("red", 8),
rep("blue", 1), rep("red", 7), rep("blue", 2), rep("red", 11)))
ggplot(data = df, aes(x = no, fill = city, pattern = split)) +
geom_bar_pattern(
color = "black",
pattern_fill = "black",
pattern_angle = 45,
pattern_density = 0.1,
pattern_spacing = 0.01,
pattern_key_scale_factor = 0.6) +
scale_pattern_manual(values = c(blue = "stripe", red = "none")) +
guides(pattern = guide_legend(override.aes = list(fill = "white"), order = 2),
fill = guide_legend(override.aes = list(pattern = "none", order=1)
))
由 reprex package (v0.3.0)
于 2021 年 3 月 14 日创建以防万一您决定要对图中的条重新排序
df <- data.frame(
no = c(rep("6", 3), "7", rep("8", 6), rep("9", 17), rep("10", 12), rep("11", 21)),
city = c(rep("Madrid", 47), rep("New York", 13)),
split = c(rep("blue", 3), rep("blue", 1), rep("blue", 4), rep("red", 2),
rep("blue", 2), rep("red", 15), rep("blue", 4), rep("red", 8),
rep("blue", 1), rep("red", 7), rep("blue", 2), rep("red", 11)))
df1 <- df %>%
group_by(no) %>%
mutate(
count_no_freq = n()
)
ggplot(data = df1, aes(x = reorder(no, -count_no_freq), fill = city, pattern = split)) +
geom_bar_pattern(
color = "black",
pattern_fill = "black",
pattern_angle = 45,
pattern_density = 0.1,
pattern_spacing = 0.01,
pattern_key_scale_factor = 0.6) +
scale_pattern_manual(values = c(blue = "stripe", red = "none")) +
guides(pattern = guide_legend(override.aes = list(fill = "white"), order = 2),
fill = guide_legend(override.aes = list(pattern = "none", order=1)
))
由 reprex package (v0.3.0)
于 2021 年 3 月 14 日创建