首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >离散化ggplot2色标的连续标度的最简单方法?

离散化ggplot2色标的连续标度的最简单方法?
EN

Stack Overflow用户
提问于 2013-07-18 10:20:53
回答 2查看 14.8K关注 0票数 18

假设我有这样的图:

ggplot(iris) + geom_point(aes(x=Sepal.Width, y=Sepal.Length, colour=Sepal.Length)) + scale_colour_gradient()

离散化颜色比例的正确方法是什么,如下面的公认答案(gradient breaks in a ggplot stat_bin2d plot)所示的图?

ggplot正确地识别离散值,并对这些离散值使用离散标度,但我的问题是,如果你有连续的数据,并且你想要一个离散的颜色条(每个方块对应一个值,方块仍然在渐变中着色),那么最好的方法是什么?离散化/入库是否应该发生在ggplot之外,并作为单独的离散值列放在dataframe中,或者有没有办法在ggplot内完成?我正在寻找的一个示例类似于下面所示的规模:

只不过我画的是散点图而不是geom_tile/heatmap。

谢谢。

EN

Stack Overflow用户

回答已采纳

发布于 2013-07-18 16:34:15

这个解决方案稍微有点复杂,因为您需要一个离散的规模。否则,您可能只需使用round

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

bincol <- function(x,low,medium,high) {
  breaks <- function(x) pretty(range(x), n = nclass.Sturges(x), min.n = 1)

  colfunc <- colorRampPalette(c(low, medium, high))

  binned <- cut(x,breaks(x))

  res <- colfunc(length(unique(binned)))[as.integer(binned)]
  names(res) <- as.character(binned)
  res
}

labels <- unique(names(bincol(iris$Sepal.Length,"blue","yellow","red")))
breaks <- unique(bincol(iris$Sepal.Length,"blue","yellow","red"))
breaks <- breaks[order(labels,decreasing = TRUE)]
labels <- labels[order(labels,decreasing = TRUE)]


ggplot(iris) + 
  geom_point(aes(x=Sepal.Width, y=Sepal.Length,
                 colour=bincol(Sepal.Length,"blue","yellow","red")), size=4) +
  scale_color_identity("Sepal.Length", labels=labels, 
                       breaks=breaks, guide="legend")

票数 10
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17713456

复制
相关文章

相似问题

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