繁体   English   中英

如何在没有alpha值的情况下将两个geom_bar叠加在一起

[英]How to overlay two geom_bar on top of each other without alpha values

我有以下数据框:

library(tidyverse)

plot_dat <- structure(list(sample_name = c("YY", "XX", "YY", 
"XX"), interaction = c("Foo interaction", "Foo interaction", 
"Bar interaction", "Bar interaction"), percent = c(9.54760559277962, 
1.21705741166346, 58.1631385457859, 13.6359995314219)), row.names = c(NA, 
-4L), .Names = c("sample_name", "interaction", "percent"), class = c("tbl_df", 
"tbl", "data.frame"))

plot_dat
#> # A tibble: 4 x 3
#>   sample_name interaction     percent
#>   <chr>       <chr>             <dbl>
#> 1 YY          Foo interaction    9.55
#> 2 XX          Foo interaction    1.22
#> 3 YY          Bar interaction   58.2 
#> 4 XX          Bar interaction   13.6

我想要做的是创建一个叠加在一起的条形图。 我有这个代码:

plot_dat$interaction <- factor(plot_dat$interaction, 
                               levels = c("Bar interaction", "Foo interaction") )

p <- ggplot(plot_dat, 
            aes(x = sample_name, y = percent, fill = interaction, 
                color = interaction, alpha = interaction)) +
  geom_bar(stat = "identity", position = "identity") +
  scale_alpha_manual(values = c(0.2, 1))
p

目前的情节如下:

在此输入图像描述

我希望Foo interaction位于叠加层的顶部。 目前,情况并非如此。 这样我必须使用alpha值来减轻Bar interaction以便Foo变得可见。

如何强制Foo显示在顶部并保持Bar在后面而不使用alpha值?

之前已报告geom_bar填充顺序未使用stat ='identity'维护 下面哈德利的响应( 粗体添加了强调):

使用stat =“identity”时,不会以任何方式操纵数据,因此条形将按原始数据框中的顺序显示。

在绘制之前,您可以尝试根据因子级别顺序排列数据框:

ggplot(plot_dat %>% arrange(interaction), 
       aes(x = sample_name, y = percent, fill = interaction)) + 
  geom_col(position = "identity")

情节

这不是最有效的答案,但您可以将两个过滤器传递到代码中并单独绘制它们。 这是我的代码:

library(tidyverse)

plot_dat <- structure(list(sample_name = c("YY", "XX", "YY", "XX"),
                       interaction = c("Foo interaction",
                                       "Foo interaction",
                                       "Bar interaction",
                                       "Bar interaction"),
                       percent = c(9.54760559277962,
                                   1.21705741166346,
                                   58.1631385457859,
                                   13.6359995314219)),
                  row.names = c(NA, -4L),
                  .Names = c("sample_name", "interaction", "percent"),
                  class = c("tbl_df", "tbl", "data.frame"))

plot_dat

plot_dat$interaction <- factor(plot_dat$interaction, levels = c("Foo interaction", "Bar interaction") )


cond1 <- plot_dat$interaction == 'Foo interaction'
cond2 <- plot_dat$interaction == 'Bar interaction'

ggplot(plot_dat[cond2,],
   aes(x=sample_name, y=percent, fill=interaction)) +
  geom_bar(stat='identity') +
  geom_bar(mapping=aes(x=plot_dat$sample_name[cond1],
                   y=plot_dat$percent[cond1],
                   fill=plot_dat$interaction[cond1]),
       stat='identity')

这是图表的输出。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM