【问题标题】:horizontal barplot with gradient color fill带有渐变颜色填充的水平条形图
【发布时间】:2023-03-19 07:25:01
【问题描述】:

我正在尝试创建水平条形图,我想通过颜色渐变填充条形图,如图所示,为此我编写了这个脚本。但是出现了错误消息: 错误:提供给连续刻度的离散值 obs.:这些列告知每个物种的频率。 这里有人知道如何创建颜色渐变吗?

Dataset <- read.csv(file = "dados_grafico_foco_barra.csv", header = TRUE, sep = ";")
attach(Dataset)
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) 
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

【问题讨论】:

    标签: r ggplot2 colors bar-chart colorbrewer


    【解决方案1】:

    两个问题:

    1. 您使用了两次fill;这本身不是问题,但令人困惑,因为geom_col 中的第二个fill = M1_sava 优先于ggplot 中的fill = momento
    2. 您错误地使用, 而不是. 作为M1_sava 列中值的小数分隔符。

    df %>%
        mutate(M1_sava = as.numeric(gsub(",", "\\.", M1_sava))) %>%
        ggplot(aes(specie, M1_sava)) +
        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)
    

    【讨论】:

    • 非常感谢 Maurits!解决了我的问题!这是一个简单的逗号问题,但没有引起注意。现在出现了另一个问题,实际上我不希望对具有较高值的​​条进行较暗的填充,而是希望从图形的顶部到底部的颜色渐变。也就是说,无论条形值如何,颜色都应该通过 topr -> bottom 方向变浅。你知道我应该在我的脚本中介绍什么来绘制这个吗?
    • @FranBraga 你能不能只使用scale_fill_gradient 并颠倒顺序,即scale_fill_gradient(low = "green", high = "white")
    • 不是因为通过这种方式颜色将继续由每个特定条的大小决定,这不是我想要的。在我提到的图形中,颜色渐变将从上到下开始,无论条形的大小如何
    • @FranBraga "[...],无论条形图大小如何,颜色渐变都会从上到下开始" 我很难理解你在说什么;你说的大小是什么意思?酒吧的长度?宽度?您可以简单地重新订购specie,使M1_sava 从上到下增加/减少。这就是你所追求的吗?
    • 首先非常感谢您的关注 :) 但是我不想像您建议的那样重新订购,因为我申请的顺序是根据物种的体重,这与条形的长度没有相关性。我创建了一个新问题并在那里放了 2 个数字。所以你可以更好地理解我想要做什么! stackoverflow.com/questions/52026353/…
    【解决方案2】:
    str(Dataset$M1_sava)
    Factor w/ 33 levels "0,00","0,02",..: 33 27 33 33 33 24 17 26 26 1 ...
    

    此外,as.numeric(as.character(Dataset$M1_sava)) 将生成 NA,因为 R 不会将 , 重新识别为小数。试试

    geom_col(aes(fill = as.numeric(gsub(',','.',Dataset$M1_sava))))
    

    【讨论】:

    • 非常感谢您的帮助,问题是一个简单的逗号问题,但没有引起注意。
    猜你喜欢
    • 2018-08-30
    • 1970-01-01
    • 2019-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-06
    • 1970-01-01
    相关资源
    最近更新 更多