最近,这个社区极大地帮助了我,让Ridgeline绘图可以处理我的数据。 现在,我正在根据自己的需要为它们着色。 基本上,我想要的是按不同顺序绘制案例,但它们应保留特定的颜色,因此即使按不同的顺序进行绘制,观察结果仍然可以识别。到目前为止,我未能将可用的解决方案应用于我的要求。
让我们以这些数据为例,我们有一个名字,一个均值和一个SD
caseName caseMean caseSD
Svansdottir 2006 -0.0646 0.4032398
Guétin 2009 -0.4649 0.3995663
Raglio 2010a -0.2145 0.2814031
首先让它们按caseMean排序
df$caseName <- factor(df$caseName, levels = df$caseName[order(df$caseMean)])
并使用以下代码对其进行绘制
library(tidyverse); library(ggridges)
n = 100
df3 <- df %>%
mutate(low = caseMean - 3 * caseSD, high = caseMean + 3 * caseSD) %>%
uncount(n, .id = "row") %>%
mutate(x = (1 - row/n) * low + row/n * high,
norm = dnorm(x, caseMean, caseSD))
ggplot(df3, aes(x, caseName, height = norm, fill=caseName)) +
geom_ridgeline(scale = 2,alpha=0.75) +
scale_fill_viridis_d()
我们得到这个:
现在我们反转顺序
df$caseName <- factor(df$caseName, levels = df$caseName[order(-df$caseMean)])
并再次使用上面的代码进行绘制,我们看到这些绘制已切换颜色:
无论我放置的顺序如何,如何确保相同的箱子始终具有相同的颜色?
我想拥有不需要我将颜色“硬连接”到特定案例名称的代码。我希望能够对具有20、30或更多观测值的山脊线图执行此操作。我选择了viridis调色板这一事实并不重要。我对任何解决方案都很满意(例如使用heat.colors或类似的东西)。
答案 0 :(得分:1)
如果新因子正好颠倒前一个因子的顺序,则可以在direction
中使用参数scale_fill_viridis_d()
。
对于更复杂的情况(即重新调整因子),可能的是可能会在原始数据框中手动添加颜色,并使用scale_fill_manual()
library(tidyverse)
df <- data.frame(name = letters[3:1], value = c(3,1,2))
pl_1 <- ggplot(aes(x=name, y=value, fill=name), data=df)+
geom_col() +
scale_fill_viridis_d()
pl_1
pl_1 %+% mutate(df, name = factor(name, levels = c("c", "b", "a"))) +
scale_fill_viridis_d(direction=-1)
#> Scale for 'fill' is already present. Adding another scale for 'fill',
#> which will replace the existing scale.
library(tidyverse)
library(viridis)
df_new <- tibble(name = letters[3:1], value = c(3,1,2),
col = rev(viridis(3))) %>%
mutate(name = factor(name, levels = c("c", "b", "a"))) %>%
arrange(name)
df_new %>%
ggplot(aes(x=name, y=value, fill=name)) +
geom_col() +
scale_fill_manual(values=df_new$col)
由reprex package(v0.3.0)于2019-06-06创建