这是我第一次在此处发布信息,因此请对我轻松一点。我已经在这个问题上搜寻了好几天了,却找不到解决方案,如果在其他地方也回答过,对不起。
我正在ggplot中制作几个堆叠的条形图,并希望所有图例上的图例类别都相同(即每个类别在每个图上具有相同的颜色),而不必手动设置所有颜色。问题是图形之间的类别不相同,因此仅指定调色板会导致类别具有不同的颜色。
我无法使用正在使用的实际数据,因此我创建了类似的数据框来模拟问题。
以下是示例df:
Year Trial Concentration Chemical
2013 1 0.8 Benzene
2013 1 1.5 Toluene
2013 1 0.8 Hexane
2013 2 1.5 Toluene
2013 2 0.8 Carboxylic Acid
2013 2 1.5 Acetone
2013 3 0.8 Ethanol
2013 3 1.9 Carboxylic Acid
2013 3 3.1 Acetone
2014 1 1.8 Benzene
2014 1 2.5 Toluene
2014 1 0.6 Methanol
2014 2 1.3 Toluene
2014 2 1.8 Carboxylic Acid
2014 2 2.5 Butane
2014 3 1.5 Ethanol
2014 3 1.2 Carboxylic Acid
2014 3 3.5 Acetone
... ... ... ...
这是图形的代码:
list <- split(df, df$Year)
plot_list <- list()
for (i in 1:5) {
df <- list[[i]]
p <- ggplot(df, aes(x = Trial, y = Concentration, width=0.8)) +
geom_bar(stat = "identity", aes(fill = Chemical))
plot_list = p
}
这是结果图:
因此,例如,在2013年图表上,棕黄色=苯,在2014年图表上,棕黄色=丁烷。我想使图例在两个图表上都相同(即2014年的图表将在图例中显示苯,即使该年未进行测量也是如此),并且每种化学品的颜色都应相同。像这样:
我知道如何使用scale_file_manual手动完成此操作,但是我大约有30种化学药品,因此我不希望手动进行设置。如果您有任何疑问或需要其他信息,请告诉我。在此先感谢您的帮助!
答案 0 :(得分:0)
我会提前建立一个表格来链接颜色和化学名称
library(data.table)
library(tidyverse)
library(RColorBrewer)
df <-
fread("
Year Trial Concentration Chemical
2013 1 0.8 Benzene
2013 1 1.5 Toluene
2013 1 0.8 Hexane
2013 2 1.5 Toluene
2013 2 0.8 Carboxylic_Acid
2013 2 1.5 Acetone
2013 3 0.8 Ethanol
2013 3 1.9 Carboxylic_Acid
2013 3 3.1 Acetone
2014 1 1.8 Benzene
2014 1 2.5 Toluene
2014 1 0.6 Methanol
2014 2 1.3 Toluene
2014 2 1.8 Carboxylic_Acid
2014 2 2.5 Butane
2014 3 1.5 Ethanol
2014 3 1.2 Carboxylic_Acid
2014 3 3.5 Acetone
")
chem_colors <-
tibble(Chemical = factor(unique(df$Chemical))) %>%
mutate(color = brewer.pal(n = n(), name = "RdBu")[as.integer(Chemical)])
# you can use your loop here instead
plot_trials <- function(year) {
ggplot(filter(df, Year == year), aes(x = Trial, y = Concentration, width=0.8)) +
geom_bar(stat = "identity", aes(fill = Chemical)) +
scale_fill_manual(values = chem_colors$color, labels = chem_colors$Chemical)
}
gridExtra::grid.arrange(
plot_trials(2013),
plot_trials(2014),
nrow = 1
)
答案 1 :(得分:0)
这是我要为大数据集工作的答案。我在上面使用了yake84的答案,并添加了colorRampPalette()函数以能够从调色板中提取更多颜色。我还将chem_colors更改为命名矢量,因为作为小标题,这些颜色未映射到我的数据框中的化学物质。
<div style="position:relative;">
<div class="animatedParent shrink" style="color:#ddd;background-color:#424242;text-align:center;padding:50px 80px;">
<div class="container">
<div class="row justify-content-center">
<div class="col">
<div class="card-group animatedParent mx-auto" data-sequence='250'>
<div class="card animated fadeIn slow rounded-0" style="max-width: 250px;" data-id='1'>
<img class="card-img-top animated fadeIn slow rounded-circle" src="/images/justin.jpg" alt="Justin Worsham" data-id='2'>
<div class="card-header animated fadeIn slow" style="color:black; font-weight:bold;" data-id='3'>
Justin Worsham
</div>
<div class="card-body animated fadeIn slow" style="color:black;" data-id='4'>
<ul>
<li>CEO</li>
<li>Head Designer</li>
<li>Head Developer</li>
<li>Head Video Editor</li>
</ul>
</div>
</div>
<div class="card animated fadeIn slow" style="max-width: 250px;" data-id='1'>
<img class="card-img-top animated fadeIn slow rounded-circle" src="/images/daniel.jpg" alt="Daniel Crews" data-id='2'>
<div class="card-header animated fadeIn slow" style="color:black; font-weight:bold;" data-id='3'>
Daniel Crews
</div>
<div class="card-body animated fadeIn slow" style="color:black;" data-id='4'>
<ul>
<li>CFO</li>
<li>Designer</li>
<li>Developer</li>
<li>Video Editor</li>
</ul>
</div>
</div>
<div class="card animated fadeIn slow rounded-0" style="max-width: 250px;" data-id='1'>
<img class="card-img-top animated fadeIn slow rounded-circle" src="/images/julian.jpg" alt="Julian Ellis" data-id='2'>
<div class="card-header animated fadeIn slow" style="color:black; font-weight:bold;" data-id='3'>
Julian Ellis
</div>
<div class="card-body animated fadeIn slow" style="color:black;" data-id='4'>
<ul>
<li>Jr Developer</li>
<li>Server Side Code</li>
<li>Intern Specialist</li>
<li>Back-end Developer</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>