首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何限制病毒色标的范围?

如何限制病毒色标的范围?
EN

Stack Overflow用户
提问于 2018-01-24 14:20:29
回答 4查看 23.3K关注 0票数 18

我有两组数据,我想用一个带有viridis色标的热图来表示。对于第一个数据集,我的值在0到1.2之间,我可以很容易地看到我想要看到的差异。然而,我的第二个数据集有一些异常值,其范围从0到2不等。现在很难看到0到1之间感兴趣的范围的差异,直接比较这两幅图像更加困难。是否有可能使用viridis颜色标度显示从0到1.2的数据,同时以黄色显示较高的值(病毒标度的“最高”颜色)?下面是一个示例:

代码语言:javascript
复制
library(viridis)

#Create Data
DataSet1 <- expand.grid(x = 0:5, y = 0:5)
DataSet1$z <- runif(36, 0, 1.2)

DataSet2 <- expand.grid(x = 0:5, y = 0:5)
DataSet2$z <- runif(36, 0, 2)

#Plot Data
ggplot(DataSet1, aes(x, y, fill = z)) + 
  geom_tile() +
  scale_fill_viridis() +
  geom_text(aes(label = round(z, 2)), size = 2)

DataSet1: 0.5和0.7之间的差异很容易看出

代码语言:javascript
复制
ggplot(DataSet2, aes(x, y, fill = z)) + 
  geom_tile() +
  scale_fill_viridis() +
  geom_text(aes(label = round(z, 2)), size = 2)

DataSet2: 0.5和0.7之间的差异很难看到

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-01-24 18:50:32

您可以定义任意的重新标度函数。不确定这看起来有多好,可能需要一些图例工作,但原则上,这种机制允许您以任何方式将数据值映射到规模上。

代码语言:javascript
复制
ggplot(DataSet2, aes(x, y, fill = z)) + 
  geom_tile() +
  scale_fill_viridis(rescaler = function(x, to = c(0, 1), from = NULL) {
    ifelse(x<1.2, 
           scales::rescale(x,
                           to = to,
                           from = c(min(x, na.rm = TRUE), 1.2)),
           1)}) +
  geom_text(aes(label = round(z, 2)), size = 2)

票数 13
EN

Stack Overflow用户

发布于 2019-02-19 10:01:53

编辑2022-05-03:现在刻度函数被称为scale_fill_viridis_c() .

@ClausWilke的解决方案更好,因为它显示在图例中,但有时只需要一个快速的解决方案,而不必编写太多的特定代码。这个程序还依赖于scales包。

代码语言:javascript
复制
ggplot(DataSet2, aes(x, y, fill = z)) + 
  geom_tile() +
  scale_fill_viridis_c(limits = c(0.2, 1), oob = scales::squish) +
  geom_text(aes(label = round(z, 2)), size = 2)

票数 17
EN

Stack Overflow用户

发布于 2018-01-24 16:06:29

你在找这样的东西吗?

代码语言:javascript
复制
ggplot(DataSet2, aes(x, y, fill = z)) + 
  geom_tile() +
  scale_fill_gradient(low="green", high="red", limits=c(0, 1.2), 
                      na.value = "yellow") +
  geom_text(aes(label = round(z, 2)), size = 2)

使用viridis颜色,asper推荐。

代码语言:javascript
复制
ggplot(DataSet2, aes(x, y, fill = z)) + 
  geom_tile() + 
  scale_fill_gradientn(colors = viridis_pal()(9), limits=c(0, 1.2), 
                       na.value = "#FDE725FF") + 
  geom_text(aes(label = round(z, 2)), size = 2)

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48424682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档