ggplot2 水平条形图,渐变颜色填充和离散值提供给连续比例

Posted

技术标签:

【中文标题】ggplot2 水平条形图,渐变颜色填充和离散值提供给连续比例【英文标题】:ggplot2 horizontal barplot with gradient color fill and Discrete value supplied to continuous scale 【发布时间】:2019-01-30 01:27:28 【问题描述】:

我正在尝试创建水平条形图,并希望使用颜色渐变填充条形图,白色表示最低值,最暗表示最高值。

首先,我通过以下脚本创建了图 1。这些列告知每个物种的频率):

Dataset <- read.csv(file = "dados.csv", header = TRUE, sep = ";")
attach(Dataset)
library(ggplot2)

ggplot(Dataset, aes(specie,M1_sava, fill = momento)) + 
  facet_wrap(~ momento, nrow=1) + # place the factors in separate facets
  geom_bar(stat="identity") +     # make the bars
  coord_flip() +                  # flip the axes so the test names can be horizontal  
  theme_bw(base_size=10)          # use a black-and-white theme with set font size

但是我想给条形留下渐变色,如图 2 所示,为此我编写了下一个脚本,但出现了错误消息:

错误:提供给连续刻度的离散值

ggplot(Dataset, aes(specie,M1_sava, fill = momento)) + 
  facet_wrap(~ momento, nrow=1) + # place the factors in separate facets
  geom_bar(stat="identity") +     # make the bars
  coord_flip() +                  # flip the axes so the test names can be horizontal  
  geom_col(aes(fill = M1_sava)) + 
  scale_fill_gradient2(low = "white",high = "green") +
  theme_bw(base_size=10)          # use a black-and-white theme with set font size

数据:

specie  momento M1_sava
S1  M1  1,00
S2  M1  0,86
S3  M1  1,00
S4  M1  1,00
S5  M1  1,00
S6  M1  0,74
S7  M1  0,39
S8  M1  0,83
S9  M1  0,83
S10 M1  0,00
S11 M1  0,70
S12 M1  0,11
S13 M1  1,00
S14 M1  0,00
S15 M1  0,00
S16 M1  0,00
S17 M1  0,00
S18 M1  0,83
S19 M1  0,00
S20 M1  0,00
S21 M1  0,00
S22 M1  0,00
S23 M1  0,00
S24 M1  0,04
S25 M1  0,00
S26 M1  0,00
S1  M2  0,33
S2  M2  0,86
S3  M2  0,39
S4  M2  0,02
S5  M2  0,07
S6  M2  0,02
S7  M2  0,87
S8  M2  0,06
S9  M2  0,63
S10 M2  0,33
S11 M2  0,91
S12 M2  0,67
S13 M2  0,18
S14 M2  0,08
S15 M2  0,00
S16 M2  0,00
S17 M2  0,00
S18 M2  0,00
S19 M2  0,08
S20 M2  0,00
S21 M2  0,04
S22 M2  0,00
S23 M2  0,00
S24 M2  0,00
S25 M2  0,00
S26 M2  0,00
S1  M3  0,04
S2  M3  0,32
S3  M3  0,02
S4  M3  0,00
S5  M3  0,00
S6  M3  0,00
S7  M3  0,96
S8  M3  0,06
S9  M3  0,18
S10 M3  0,33
S11 M3  0,63
S12 M3  1,00
S13 M3  0,00
S14 M3  0,94
S15 M3  0,17
S16 M3  0,00
S17 M3  0,41
S18 M3  0,04
S19 M3  0,44
S20 M3  0,17
S21 M3  0,02
S22 M3  0,00
S23 M3  0,00
S24 M3  0,00
S25 M3  0,00
S26 M3  0,00
S1  M4  0,00
S2  M4  0,00
S3  M4  0,00
S4  M4  0,00
S5  M4  0,00
S6  M4  0,00
S7  M4  0,89
S8  M4  0,00
S9  M4  0,03
S10 M4  0,22
S11 M4  0,41
S12 M4  0,46
S13 M4  0,00
S14 M4  0,81
S15 M4  0,39
S16 M4  0,70
S17 M4  0,70
S18 M4  0,00
S19 M4  0,87
S20 M4  0,91
S21 M4  0,33
S22 M4  0,37
S23 M4  0,24
S24 M4  0,15
S25 M4  0,00
S26 M4  0,00

【问题讨论】:

尝试从您的代码中删除 geom_bar(stat="identity") + 行。它仍然继承了***美学映射fill = momento(即离散尺度),与scale_fill_gradient2(即连续尺度)发生冲突。 谢谢 Z.lin,但是使用以下脚本会出现错误消息:错误:stat_count() 不得与 y 美学一起使用。 ggplot(Dataset, aes(specie,M1_sava)) + facet_wrap(~ momento, nrow=1) + # 将因子放在不同的方面 geom_bar() + # 使条形图 coord_flip() + # 翻转轴,以便测试名称可以水平 geom_col(aes(fill = M1_sava)) + scale_fill_gradient2(low = "white",high = "green") + theme_bw(base_size=10) 【参考方案1】:

正如@Z.Lin 所写 - 你应该删除geom_bar(stat="identity") + 但保留fill = momento

Dataset <- read.table(text = "specie  momento M1_sava
                  S1  M1  1.00
                  S2  M1  0.86
                  S3  M1  1.00
                  S4  M1  1.00
                  S5  M1  1.00
                  S6  M1  0.74
                  S7  M1  0.39
                  S8  M1  0.83
                  S9  M1  0.83
                  S10 M1  0.00
                  S11 M1  0.70
                  S12 M1  0.11
                  S13 M1  1.00
                  S14 M1  0.00
                  S15 M1  0.00
                  S16 M1  0.00
                  S17 M1  0.00
                  S18 M1  0.83
                  S19 M1  0.00
                  S20 M1  0.00
                  S21 M1  0.00
                  S22 M1  0.00
                  S23 M1  0.00
                  S24 M1  0.04
                  S25 M1  0.00
                  S26 M1  0.00
                  S1  M2  0.33
                  S2  M2  0.86
                  S3  M2  0.39
                  S4  M2  0.02
                  S5  M2  0.07
                  S6  M2  0.02
                  S7  M2  0.87
                  S8  M2  0.06
                  S9  M2  0.63
                  S10 M2  0.33
                  S11 M2  0.91
                  S12 M2  0.67
                  S13 M2  0.18
                  S14 M2  0.08
                  S15 M2  0.00
                  S16 M2  0.00
                  S17 M2  0.00
                  S18 M2  0.00
                  S19 M2  0.08
                  S20 M2  0.00
                  S21 M2  0.04
                  S22 M2  0.00
                  S23 M2  0.00
                  S24 M2  0.00
                  S25 M2  0.00
                  S26 M2  0.00
                  S1  M3  0.04
                  S2  M3  0.32
                  S3  M3  0.02
                  S4  M3  0.00
                  S5  M3  0.00
                  S6  M3  0.00
                  S7  M3  0.96
                  S8  M3  0.06
                  S9  M3  0.18
                  S10 M3  0.33
                  S11 M3  0.63
                  S12 M3  1.00
                  S13 M3  0.00
                  S14 M3  0.94
                  S15 M3  0.17
                  S16 M3  0.00
                  S17 M3  0.41
                  S18 M3  0.04
                  S19 M3  0.44
                  S20 M3  0.17
                  S21 M3  0.02
                  S22 M3  0.00
                  S23 M3  0.00
                  S24 M3  0.00
                  S25 M3  0.00
                  S26 M3  0.00
                  S1  M4  0.00
                  S2  M4  0.00
                  S3  M4  0.00
                  S4  M4  0.00
                  S5  M4  0.00
                  S6  M4  0.00
                  S7  M4  0.89
                  S8  M4  0.00
                  S9  M4  0.03
                  S10 M4  0.22
                  S11 M4  0.41
                  S12 M4  0.46
                  S13 M4  0.00
                  S14 M4  0.81
                  S15 M4  0.39
                  S16 M4  0.70
                  S17 M4  0.70
                  S18 M4  0.00
                  S19 M4  0.87
                  S20 M4  0.91
                  S21 M4  0.33
                  S22 M4  0.37
                  S23 M4  0.24
                  S24 M4  0.15
                  S25 M4  0.00
                  S26 M4  0.00", header = T)

library(ggplot2)

ggplot(Dataset, aes(specie, M1_sava, fill = momento)) + 
  facet_wrap(~ momento, nrow = 1) + 
  coord_flip() + 
  geom_col(aes(fill = M1_sava)) + 
  scale_fill_gradient2(low = "white", high = "green") + 
  theme_bw(base_size = 10)  

这是想要的输出吗?

【讨论】:

嗨阿德拉,谢谢!我想要这个图形,但我已经尝试了你和@z.lin 说的脚本,但它没有用。您是否使用了这个确切的脚本?因为我正在尝试这个,但错误消息仍然出现 我还添加了数据和库的上传。这是我的完整代码。也许你有一些旧版本的ggplot2。尝试更新它。

以上是关于ggplot2 水平条形图,渐变颜色填充和离散值提供给连续比例的主要内容,如果未能解决你的问题,请参考以下文章

R语言ggplot2可视化改变柱状图(条形图)的填充色实战:默认的颜色为灰色改变柱状图(条形图)的填充色设置每个柱子(条形)使用不同的色彩

11.ggplot2——色阶与图例(二)

绘制水平条形图的给定颜色并使用 ggplot2 将未绘制区域用灰色着色

很想弄清楚 R 中的条形图上哪个因子级别已映射到哪个填充颜色?

用渐变填充条形图的径向条

将水平线添加到 R 中 ggplot2 中的堆叠条形图,并在图例中显示