除了我希望对值进行对数转换之外,如何制作颜色设置为渐变的 ggplot2 图表?

问题描述 投票:0回答:1

我正在制作一个 ggplot2 图表,其中我将非常广泛的数字映射到颜色。问题是我的数字是对数正态分布的,所以我有一堆数字都设置为相同的颜色,因为 ggplot2 中的渐变假设这些值处于非常相似的线性尺度上。以下是一些示例数据:

DF <- data.frame(A = 1:10, 
             B = 1:10, 
             C = 10^seq(-5, 4))

当我使用常规 ggplot2 设置时,除了最后一点之外的所有点都是深蓝色。

ggplot(DF, aes(x = A, y = B, color = C)) +
   geom_point()

enter image description here

如果我对这些值进行对数变换,颜色看起来会更好,但现在我的图例显示对数变换值而不是实际值。

ggplot(DF, aes(x = A, y = B, color = log10(C))) +
   geom_point()

enter image description here

我还尝试使用scale_color_gradientn,希望也许我可以按照我想要的方式设置数字中断,但这确实行不通。极小的值现在全部变成灰色或缺失。

ggplot(DF, aes(x = A, y = B, color = C)) +
   geom_point() +
   scale_color_gradientn(colors = grDevices::blues9, 
                         values = 10^seq(-5, 4))

enter image description here

有没有办法让我的渐变颜色在 log10 范围内,但标签仍然是实际值?

r ggplot2
1个回答
0
投票

你就快到了,你需要指定颜色范围:

library(ggplot2)

DF <- data.frame(A = 1:10, B = 1:10, C = 10^seq(-5, 4))

ggplot(DF, aes(x = A, y = B, color = C)) +
  geom_point(size = 3) +  
  scale_color_gradient(trans = 'log10',  
                       low = "lightblue", high = "darkblue",, 
                       breaks = 10^seq(-5, 4),  
                       labels = scales::comma) +  
  labs(color = "C Value") +  
  theme_minimal()  

这给出了

enter image description here

如果你还是觉得浅蓝色太灰(浅蓝色中含有灰色,我建议你换成其他颜色:

library(ggplot2)

DF <- data.frame(A = 1:10, B = 1:10, C = 10^seq(-5, 4))

ggplot(DF, aes(x = A, y = B, color = C)) +
  geom_point(size = 3) +  
  scale_color_gradient(trans = 'log10',  
                       low = "blue", high = "red", 
                       breaks = 10^seq(-5, 4),  
                       labels = scales::comma) +  
  labs(color = "C Value") +  
  theme_minimal()  

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.