在ggplot中创建半离散颜色条

Posted

技术标签:

【中文标题】在ggplot中创建半离散颜色条【英文标题】:Creating semi-discrete colourbar in ggplot 【发布时间】:2017-01-28 20:31:25 【问题描述】:

我正在尝试使用 geom_tile 创建一个绘图。源数据是连续的,但我想使用离散级别对其进行着色,以使结果图更易于阅读。我希望生成的颜色条显示离散水平,但将基础数据称为连续数据。像这样的东西:

本质上是一个连续的色阶,上面覆盖着离散值。

到目前为止,我有这个:

require( ggplot2)

x <- rep( 1:10, 10)
y <- rep( 1:10, each=10)
z <- rnorm( length(y))

df <- data.frame( x, y, z)

ggplot( df) + geom_tile( aes( x, y, fill=z)) +
scale_fill_gradient2( low="blue", mid="white", high="red", midpoint=0)

给出这个:

我想合并连续变量“z”来设置级别,所以我可以使用 cut:

df$discrete_z <- cut( z, breaks=seq( -3,3, 1), include.lowest=T)

ggplot( df) + geom_tile( aes( x, y, fill=discrete_z)) +   
scale_fill_brewer( type="div", palette="PRGn", guide="legend")

给出这个:

这更接近,但现在数字表示为每个颜色“块”上的范围,而我试图让数字分别位于颜色块之间,以更好地展示连续比例。

【问题讨论】:

discrete_z 是一个因素。您可以更改级别名称,最简单的是在 cut 中使用标签参数 【参考方案1】:

如果您选择每个区间的下限作为 bin 名称,您会得到如下内容:

df$discrete_z <- cut( z, breaks=seq( -3,3, 1), labels = seq( -3,2, 1), include.lowest=T)

ggplot( df) + geom_tile( aes( x, y, fill=discrete_z)) +   
  scale_fill_brewer( type="div", palette="PRGn", guide="legend")

【讨论】:

问题是,因为每种颜色代表一个 bin,与默认标签相比,这会丢失一些信息。例如,标记为“-2”的 bin 实际上包含从 -2 到 -3 的值。真的,我需要标签位于类别之间,就像示例颜色条一样。

以上是关于在ggplot中创建半离散颜色条的主要内容,如果未能解决你的问题,请参考以下文章

ggplot2:将颜色固定到因子水平

R语言使用ggplot2包geom_jitter()函数绘制分组(strip plot,一维散点图)带状图(颜色配置:连续色彩离散色彩色彩梯度)实战

ggplot2 配色

如何在 ggplot 中创建一个图例,将名称和颜色分配给列而不是数据框列中的值?

在ggplot中用标准颜色(黑色)更改第一条图形线

ggplot图中每个方面的不同颜色条