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可视化改变柱状图(条形图)的填充色实战:默认的颜色为灰色改变柱状图(条形图)的填充色设置每个柱子(条形)使用不同的色彩
绘制水平条形图的给定颜色并使用 ggplot2 将未绘制区域用灰色着色