相关疑难解决方法(0)

scale_gradient2中的不对称颜色分布?

更改上限scale_fill_gradient2也会影响值<0的颜色分类,因为0周围的颜色分布似乎总是对称的,是否有办法获得颜色值的不对称分布?

这是一个使用的情节的最小例子geom_tile():

data <- read.csv("http://protzkeule.de/data.csv")
p <- ggplot(data = data, aes(x = variable, y = meas)) + geom_tile(aes(fill = value))
Run Code Online (Sandbox Code Playgroud)

具有对称限制的图:

p + scale_fill_gradient2(low = "blue", mid = "white", high = "red", guide = "colorbar",
                         limits = c(-0.1, 0.1))
Run Code Online (Sandbox Code Playgroud)

但是当更改上限时,较低的颜色映射也会改变(观察颜色条):

p + scale_fill_gradient2(low = "blue", mid = "white", high = "red", guide = "colorbar",
                         limits = c(-0.1, 0.3))
Run Code Online (Sandbox Code Playgroud)

r colors scale ggplot2

18
推荐指数
1
解决办法
4845
查看次数

geom_raster中值范围内的非线性颜色分布

我遇到了以下问题:一些极端值主导着我的geom_raster情节的色阶.一个例子可能更清楚(请注意,此示例仅适用于最近的ggplot2版本,我使用0.9.2.1):

library(ggplot2)
library(reshape)
theme_set(theme_bw())

m_small_sd = melt(matrix(rnorm(10000), 100, 100))
m_big_sd = melt(matrix(rnorm(100, sd = 10), 10, 10))
new_xy = m_small_sd[sample(nrow(m_small_sd), nrow(m_big_sd)), c("X1","X2")]
m_big_sd[c("X1","X2")] = new_xy
m = data.frame(rbind(m_small_sd, m_big_sd))
names(m) = c("x", "y", "fill")

ggplot(m, aes_auto(m)) + geom_raster() + scale_fill_gradient2()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

现在我通过将某个分位数上的值设置为等于该分位数来解决此问题:

qn = quantile(m$fill, c(0.01, 0.99), na.rm = TRUE)
m = within(m, { fill = ifelse(fill < qn[1], qn[1], fill)
                fill = ifelse(fill > qn[2], qn[2], fill)})
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

这并不是一个真正的最佳解决方案.我想要做的是将颜色的非线性映射到值的范围,即在具有更多观察值的区域中存在更多颜色.在spplot我可以用classIntervalsclassInt包计算合适的阶级界限:

library(sp)
library(classInt)
gridded(m) = …
Run Code Online (Sandbox Code Playgroud)

r geospatial ggplot2

16
推荐指数
1
解决办法
3929
查看次数

转换颜色比例,但与ggplot2保持一个很好的传奇

我已经看到了类似的问题,但我想直接问我的具体问题:

我有一个散点图,其中"z"变量编码为色标:

library(ggplot2)
myData <- data.frame(x = rnorm(1000),
                     y = rnorm(1000))
myData$z <- with(myData, x * y)

badVersion <- ggplot(myData,
              aes(x = x, y = y, colour = z))
badVersion <- badVersion + geom_point()
print(badVersion)
Run Code Online (Sandbox Code Playgroud)

产生这个: 糟糕的版本

正如您所看到的,由于"z"变量是正态分布的,因此很少有点用分布的"极端"颜色着色.这是应该的,但我有兴趣强调差异.一种方法是使用:

betterVersion <- ggplot(myData,
                        aes(x = x, y = y, colour = rank(z)))
betterVersion <- betterVersion + geom_point()
print(betterVersion)
Run Code Online (Sandbox Code Playgroud)

产生这个: 更好的版本

通过将rank()应用于"z"变量,我更加强调"z"变量中的微小差异.可以想象在这里使用任何转换,而不是排名,但你明白了.

我的问题基本上是,以最简单的方式,或最"真正的ggplot2"方式,以原始单位(z的单位,而不是z的等级)获得一个图例,同时保持转换后的版本有色点?

我有一种感觉,它以某种方式使用rescaler(),但我不清楚如何使用rescaler()与任意转换等.一般来说,更明确的例子将是有用的.

在此先感谢您的时间.

r ggplot2

15
推荐指数
1
解决办法
1621
查看次数

R ggplot2-调整连续色条渐变上的中断之间的距离

我在中创建了一个热图,并ggplot2使用geom_tile映射了值scale_fill_gradientn。色标分为两个渐变。一个梯度将值从0映射到0.05,另一个梯度将值从0.05映射到1。我希望红黄色渐变(0-0.05)具有与黑褐色渐变(0.05-1)相同的高度。

热图

问题:如何修改颜色条,以使值0.05位于条的中间/中央,从而使两个不同的颜色渐变的高度相同?

换句话说,假设0.05刻度线是一个滑块,您可以将其移动到扩展/压缩各个渐变的条的中间。

以下两篇文章讨论了类似的问题,但没有最终解决方案,或者至少没有我可以轻易理解并回答我的问题的解决方案:

非常感谢大家阅读我的问题并思考可能的解决方案。到目前为止,除了在Photoshop中编辑颜色栏外,我什么都找不到。彼得



可重现的示例:

TEST <- read.csv ("https://filetea.me/n3wHRhuy0GlS4xvjQDxs95BVA",header=T,row.names=NULL)

library(ggplot2) 
ggplot(TEST, aes(x=Measure, y=SMTSD))+
    geom_tile(aes(fill=Pval),colour="grey50", size=0.1) +
    scale_x_discrete(expand = c(0,0))+
    coord_equal(ratio=1)+

scale_fill_gradientn(colours=c("red","yellow","black","#996633"),
    values=c(0,0.0499,0.05,1),
    na.value="white", guide="colourbar",
    name="P-value",limits=c(0,1),breaks=c(0,0.05,1))+

 guides(fill = guide_colourbar(barheight = 20, direction = "vertical",
        title.position="top", title.hjust = 0.5,title.vjust = 0.5, nbin = 50))
Run Code Online (Sandbox Code Playgroud)

r heatmap ggplot2

3
推荐指数
1
解决办法
1330
查看次数

标签 统计

ggplot2 ×4

r ×4

colors ×1

geospatial ×1

heatmap ×1

scale ×1