【问题标题】:Fixing legends and color scheme of ggplot2 bubble grid plot修复 ggplot2 气泡网格图的图例和配色方案
【发布时间】:2023-01-24 16:59:32
【问题描述】:

问题

我正在尝试创建一个气泡网格热图,例如 here 中的那个。 然而,我在改编这段代码时遇到了几个问题。到目前为止我的代码是:

ggplot(yzlong2, aes(x = Period, y = Statement)) +
  geom_point(aes(col = Avg, fill = Avg, size = Count), shape = 21) +
  theme_minimal() +
  theme(
    legend.position = 'top',
    text = element_text(color = 'grey40', size = 20)
  ) +
  scale_size_area(max_size = 15, guide='none') +
  scale_fill_gradient(high = "blue", low= "red", name="Average",
                    labels = c("5", "4", "3", "2", "1"),
                    breaks = c(5, 4, 3, 2, 1))

我在使用这段代码时遇到了几个问题:

  1. 如何在保留新填充图例的同时删除旧的蓝色渐变填充图例?
  2. 如何通过选择中间色来更改新填充图例的配色方案?我希望配色方案从红色变为白色再变为蓝色。如果有一种方法可以添加更多颜色可能会更好,因为 Avgs 分布非常紧密
  3. 如何将填充图例的比例从 1(红色)更改为 5(蓝色)?

    数据

    structure(list(Statement = c("A1", "A2", "A3", "A4", "A5", "A6", 
    "A7", "A8", "A9", "A10", "A11", "A12", "A13", "A14", "A15", "A16", 
    "A17", "A18", "A19", "A20", "A21", "A22", "A23", "A24", "A25", 
    "A26", "A27", "A28", "A29", "A30", "A31", "A32", "A33", "A34"
    ), Period = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("Mar-1930", "Apr-1930"
    ), class = "factor"), Avg = c(4.6, 4.2, 4.6, 4.2, 4.2, 4.8, 4.2, 
    3.6, 4, 4.2, 4.6, 4.6, 4.2, 4.2, 4.8, 4.6, 4.6, 4.33333333333333, 
    4.5, 4.66666666666667, 4.33333333333333, 4.33333333333333, 4.33333333333333, 
    4.33333333333333, 3.5, 3.83333333333333, 4, 4.5, 4.33333333333333, 
    4.66666666666667, 4.33333333333333, 4.83333333333333, 4.83333333333333, 
    4.66666666666667), Count = c(5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
    5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 
    6, 6)), row.names = c(NA, -34L), class = "data.frame")
    

    环境

    sessionInfo()
    R version 4.1.2 (2021-11-01)
    Platform: x86_64-w64-mingw32/x64 (64-bit)
    Running under: Windows 10 x64 (build 19045)
    

【问题讨论】:

    标签: r ggplot2 visualization


    【解决方案1】:
    1. 如何在保留新填充图例的同时删除旧的蓝色渐变填充图例?

      看起来您实际上并没有使用颜色参数,您可以从 aes() 函数中删除 col = Avg 。在图表2,当涉及到像圆圈这样的内部形状时,color 用于轮廓,fill 用于内部。

      所以删除col = Avg是一种选择。如果您出于某种原因想要保留它但只是不想使用图例,请将 +guides(color = 'none') 添加到您的代码中以删除颜色图例。

      1. 如何通过选择中间色来更改新填充图例的配色方案?我希望配色方案从红色变为白色再变为蓝色。如果有一种方法可以添加更多颜色可能会更好,因为 Avgs 分布非常紧密
      2. 如何将填充图例的比例从 1(红色)更改为 5(蓝色)?

      scale_fill_gradient2() scale 函数包含一个“中间”。您还可以使用 limits 选项使其运行从 1 到 5 的整个范围。请注意,这将为您提供相当窄的颜色范围,因为您的大部分数据仅在该比例的狭窄范围内。真正解决这个问题的唯一方法是选择相距更远的低色和高色。没有真正的解决办法——如果你想让 1 和 5 有自己的颜色,那么你的数据的小范围自然只会覆盖该范围的一小部分。充其量您可以开始使用奇怪的转换函数来使您的小数据范围覆盖您指定的色谱的更广泛份额。

      library(ggplot2)
      
      ggplot(yzlong2, aes(x = Period, y = Statement)) +
        geom_point(aes(fill = Avg, size = Count), shape = 21) +
        theme_minimal() +
        theme(
          legend.position = 'top',
          text = element_text(color = 'grey40', size = 20)
        ) +
        scale_size_area(max_size = 15, guide='none') +
        scale_fill_gradient2(high = "blue", mid = 'white', low= "red", name="Average",
                            midpoint = 3,
                            limits = c(1, 5))
      

    【讨论】:

      猜你喜欢
      • 2023-03-12
      • 2022-01-13
      • 2018-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-23
      • 1970-01-01
      相关资源
      最近更新 更多