【发布时间】:2020-09-19 06:16:30
【问题描述】:
乡亲-
我很尴尬地为看起来应该如此简单的事情征求建议,但我的挫败感超过了我的尴尬。如何在 facet_wrap 中更改单个面板的顺序、标签和线条颜色,同时对其他面板使用自动排序、标签和着色。具体来说,我想绘制 Freedonia 国家及其四个州(Chico、Groucho、Harpo 和 Zeppo,以 Freedonia 的开国元勋命名)中的每一个的“布朗克斯欢呼率”,但让“Freedonia”成为第一个面板图表并使其线条变黑。这就是我所拥有的:
我的(当然是不优雅的)解决方案是
- 将“Freedonia”重新编码为“aaa”(因此首先出现)。
- 使用
geom_line语句将数据子集设置为“aaa”并将线条颜色更改为黑色。 - 将面板的标签改回“Freedonia”。在我进入第三步之前我很好。
这是一些具有可重现(或者它是可复制的?)示例的代码:
library(dplyr)
library(ggplot2)
library(data.table)
#Simulate Data
set.seed(581)
state <- rep(c("Chico","Groucho","Harpo","Freedonia","Zeppo"), each=4)
x <- rep(1:4, times = 5)
y <- 100 + rnorm(20, 0, 5)*x + rnorm(20, 0, 20)
df <- cbind(state, x, y) %>% data.table() %>%
.[ , .(state, x = as.numeric(x), y = as.numeric(y))]
#Recode
df <- df[ , state := recode(state, "Freedonia" = "aaa")]
#Generate Labels
labels <- unique(df$state[which(state != "Freedonia")])
labels <- c("Freedonia", labels)
#Grid Plot with Freedonia First
p <- ggplot(df, aes(x, y, color = state)) +
geom_line() +
geom_line(data = subset(df, state == "aaa"), color = "black") +
ggtitle("Average Bronx Cheers by Quarter (1934)") +
theme_bw() +
theme(legend.position = "none") +
theme(plot.title = element_text(hjust = 0.5)) +
xlab("Quarter") +
ylab("Bronx Cheer Rate") +
#facet_wrap(~ state)
#facet_wrap(~ state, labeller = labeller(state = labels))
facet_wrap(~ state, labeller = labeller(setNames(nm = labels)))
p
这是结果。
我意识到只有五个面板,手动执行此操作是微不足道的(例如,scale_fill_manual),但您可能已经猜到我对 Freedonia 并不真正感兴趣,而是有很多县的州 - 太多无法手动完成。我看过的不是详尽,而是彻底,还没有看到任何可以解决这个确切问题的东西。
非常感谢您的帮助。
问候, 大卫
【问题讨论】:
标签: r label panel facet-wrap