- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
例如,我想将颜色映射到 z
,其中 0 映射到“白色”。
> a <- data.frame(x=1:10, y=1, z=c(rnorm(8),-12,12))
> a
x y z
1 1 1 -0.4603911
2 2 1 -0.4868471
3 3 1 0.2180346
4 4 1 -0.8807652
5 5 1 1.7379462
6 6 1 -0.1334904
7 7 1 -0.3675578
8 8 1 0.9225425
9 9 1 -12.0000000
10 10 1 12.0000000
ggplot(a,aes(x=x,y=y,fill=z)) + geom_bar(stat="identity") +
scale_fill_gradient2(high="green", mid="white", low="red")
正如您所看到的,颜色并不是真正有用的指示器,现在颜色只能告诉哪些值是极端值,而不是传达值如何分布的一般概念,未经训练的眼睛无法区分大多数值。
有一个方法Non-linear color distribution over the range of values in a geom_raster但似乎有点复杂,我只能模糊地理解它是如何工作的。
然后我想也许 order
是一种很好的重新缩放方式,因此:
ggplot(a,aes(x=x,y=y,fill=ecdf(z)(z))) + geom_bar(stat="identity") +
scale_fill_gradient2(high="green", mid="white", low="red", midpoint=ecdf(a$z)(0))
它在某种程度上起作用(这里我使用ecdf
而不是order
来查找重新缩放的值0。但是,缺点是,我想保留图例的标签作为未缩放的值,而不是重新缩放的值。所以类似 labels=function(x) quantile(a$z, x)
的东西,我无法使其工作。另外,我发现重复使用 ecdf
和 quantile
向前和向后重新缩放是愚蠢的。
在这些情况下有没有更好或更简单的方法,例如足够鲁棒(不需要是最优的或非常准确)足以为映射值的各种分布填充合理的颜色。
最佳答案
据我所知,没有一种简单的方法,但您可以使用 scale_fill_gradientn
完全控制映射。关键是将颜色映射到 0-1 范围内的值,其中 0 是最小值,1 是最大值。这是一个选项:
library(ggplot2)
a <- data.frame(x=1:10, y=1, z=c(rnorm(8),-12,12))
get_col <- colorRamp(c("red", "white", "green")) # make fun to interpolate colors
quantiles <- (0:6) / 6 # how many quantiles we want to map
quantile.vals <- quantile(a$z, quantiles, names=F)# the values for each quantile
colours <- rgb(get_col(quantiles), max=255) # 7 evenly interpolated colors
val.remap <- (quantile.vals - min(a$z)) /
diff(range(a$z)) # The values corresponding to the quantiles
ggplot(a, aes(x=x,y=y,fill=z)) +
geom_bar(stat="identity") +
scale_fill_gradientn(
colours=colours,
values=val.remap,
breaks=quantile.vals,# Necessary to get legend values spread appropriately
guide="legend") # Necessary to get legend values spread appropriately
在这里,我们选择根据值的分布将均匀插值的颜色分配给值。因此,如果一个值范围对应于分布的很大一部分,即使它实际上跨越了最小-最大范围的相对较小的部分,它也会分配更多的颜色。
如果您想将特定颜色分配为零,可以通过编辑与颜色
、值
和中断
相对应的向量来实现> 论据。如果您有相同数量的高于和低于零的值,则这很简单;如果没有,则很烦人。
版本 w/0 设置为白色:
library(ggplot2)
a <- data.frame(x=1:10, y=1, z=c(rnorm(8), -12, 12))
splits <- 7 # should be odd number
mid.point <- 0
pos.vals <- a$z[a$z > mid.point]
neg.vals <- a$z[a$z < mid.point]
pos.quants <- quantile(c(mid.point, pos.vals), 0:((splits - 1) / 2) / ((splits - 1) / 2), names=F)
neg.quants <- quantile(c(mid.point, neg.vals), 0:((splits - 1) / 2) / ((splits - 1) / 2), names=F)
quants <- c(neg.quants, pos.quants[-1]) # drop of the mid-point from pos.quants since otherwise double counted
get_col <- colorRamp(c("red", "white", "green")) # make fun to interpolate colors
colours <- rgb(get_col(0:(splits - 1)/(splits - 1)), max=255) # 7 evenly interpolated colors
val.remap <- (quants - min(quants)) /
diff(range(quants)) # The values corresponding to the quantiles
ggplot(a, aes(x=x,y=y,fill=z)) +
geom_bar(stat="identity") +
scale_fill_gradientn(
colours=colours,
values=val.remap,
breaks=quants,
guide="legend")
关于r - 使用scale_fill_gradient时处理极值/分布的其他方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19017492/
我有两个项目。一个项目正在运行,没有任何问题。它是从 gitlab 下载的。另一个项目是从 github 下载的。 github项目有这个问题。我想使用默认的 gradle 分布。我想知道我做错了什么
我正在通过我学习的大学提供的 VNC 软件(远程访问)使用 IBM bigInsights,但我无法通过该桌面访问 Internet。为了使用互联网上的一些数据样本,我决定安装 Hadoop 在我的笔
所以,这非常简单,我有一个包含嵌套列表的列表,如下所示: List( *list1* List(List("n1", "n3"), List("n1", "n4"), List("n3", "n4")
我有以下示例。 prefix = ['blue ','brown '] suffix = [('dog','shoes','bike'), ('tree','cat','car')] 我想获得一个如下
我创建了一项调查并将其发送出去。该调查要求用户提供电子邮件,然后要求他们从包含 8 个不同选项的下拉菜单中选择要吃哪顿饭。有些人使用同一封电子邮件多次填写调查,但食物选择不同。 我有一个如下所示的 M
我在 Python 中使用 plotly 来创建由某些分类变量着色的美国县的等值线。由于县非常小,因此图像中的边界线占主导地位。我怎样才能摆脱它们(或将它们的宽度设置为零)? 到目前为止的代码和输出(
我们有qgamma在 R 和 gamm.inv在 excel 中,我无法使用 invgamma 获得相同的结果python中的函数。例如在excel中GAMMA.INV(0.99,35,0.08)=4
过去几年我经常使用 Docker,但对于 Kubernetes 来说我还是个新手。我从今天开始,与我以前使用 Docker swarm 的方式相比,我正在努力思考 Pod 概念的实用性。 假设我有一个
我有一个 UIStackView然而,subViews的第一个 View 是 UILabel它没有相应地调整它的大小。 我的代码如下; private let stackView: UIStackVi
我想绘制自由度为 1、2、5 和 10 的 Student t 分布;所有在一个图中,并为图中的每个分布使用不同的颜色。此外,在 Canvas 的左上角创建一个图例,并增加 df = 1 的曲线线宽。
我对 Python 很陌生,我在互联网上浏览过,但找不到任何可以帮助我解决问题的逻辑。 我在图中有降水值,现在我需要根据图中的这些值拟合 GEV 分布。每个值等于从 1974 年到 2017 年的一年
我正在尝试复制此图 https://wind-data.ch/tools/weibull.php 我编写的代码是 import matplotlib.pyplot as plt import nump
对于家庭作业,我必须绘制文本的词频并将其与最佳 zipf 分布进行比较。 根据对数对数图中的排名绘制文本的词频计数似乎效果很好。 但是我在计算最佳 zipf 分布时遇到了麻烦。结果应该如下所示: 我不
Mathematica 具有四参数广义逆 Gamma 分布: http://reference.wolfram.com/mathematica/ref/InverseGammaDistribution
正在用 C 语言开发一个学校项目,使用 Pthreads 将一维数组分解为 tRows 和 tCols 的子矩阵。整个数组的大小为 wRows 和 wCols。假设 wCols = 4、wRows =
有没有办法得到制服int32_t没有警告的分发?我用这个uniform_int_distribution在我的代码中,但我收到警告: 54988961.cpp: In function ‘int ma
在花了相当多的时间试图了解如何在 postgresql 数据库服务器之间实现负载平衡(分配数据库处理负载)之后,我来到这里。 我有一个 postgresql 系统,每秒吸引大约 100 笔交易,而且这
所以标题已经说明了一切。我们正在开发一个开始获得大量依赖项的项目。到目前为止,我们一直在使用 setuptools,但越来越多的依赖项要么不容易安装(例如 wxPython),要么在某些使用 easy
我有以下代码: #include #include #include using namespace boost::numeric; using namespace interval_lib;
我有一个对象列表,我想以随机顺序连续访问这些对象。 我想知道是否有一种方法可以确保随机值并不总是相似。 例子。 我的列表是队列列表,我试图交错这些值以生成用于测试的真实场景。 我并不是特别想要队列 1
我是一名优秀的程序员,十分优秀!