首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >geom_histogram的梯度着色

geom_histogram的梯度着色
EN

Stack Overflow用户
提问于 2017-05-05 01:44:28
回答 3查看 2.6K关注 0票数 7

我试图绘制一个geom_histogram,其中的条形被一个渐变着色。

这就是我想做的:

代码语言:javascript
复制
library(ggplot2)
set.seed(1)
df <- data.frame(id=paste("ID",1:1000,sep="."),val=rnorm(1000),stringsAsFactors=F)
ggplot(df,aes_string(x="val",y="..count..+1",fill="val"))+geom_histogram(binwidth=1,pad=TRUE)+scale_y_log10()+scale_fill_gradient2("val",low="darkblue",high="darkred")

但得到:

知道怎么用定义的渐变来着色吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-05-05 02:02:57

不确定是否可以由val填充,因为直方图中的每个条表示一个点数集合。

但是,您可以使用cut填充分类箱。例如:

代码语言:javascript
复制
ggplot(df, aes(val, fill = cut(val, 100))) +
  geom_histogram(show.legend = FALSE)

票数 15
EN

Stack Overflow用户

发布于 2017-05-08 16:30:41

只是为了完整。

如果我希望手动选择渐变,下面是我的建议:

数据:

代码语言:javascript
复制
library(ggplot2)
set.seed(1)
df <- data.frame(id=paste("ID",1:1000,sep="."),val=rnorm(1000),stringsAsFactors=F)

颜色:

代码语言:javascript
复制
bins <- 10
cols <- c("darkblue","darkred")
colGradient <- colorRampPalette(cols)
cut.cols <- colGradient(bins)
cuts <- cut(df$val,bins)
names(cuts) <- sapply(cuts,function(t) cut.cols[which(as.character(t) == levels(cuts))])

情节:

代码语言:javascript
复制
ggplot(df,aes(val,fill=cut(val,bins))) + 
    geom_histogram(show.legend=FALSE) +
    scale_color_manual(values=cut.cols,labels=levels(cuts)) +
    scale_fill_manual(values=cut.cols,labels=levels(cuts))

票数 5
EN

Stack Overflow用户

发布于 2021-10-05 06:41:58

与手动绑定不同,另一种选择是利用stat_bin计算的回收箱,将..x.. (或在离散比例情况下的factor(..x..) )或after_stat(x)映射到fill美学中。

手工计算回收箱的一个问题是,每个回收站最终有多个组,必须对其计算计数(即使大多数情况下计数为零),这些组在直方图中相互叠加。特别是,如果像在这个post中看到的那样,将计数标签添加到直方图中,就会出现问题,因为在这种情况下,每个bin会有多个标签。

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

set.seed(1)

df <- data.frame(id = paste("ID", 1:1000, sep = "."), val = rnorm(1000), stringsAsFactors = F)

ggplot(df, aes(x = val, y = ..count.. + 1, fill = ..x..)) +
  geom_histogram(binwidth = .1, pad = TRUE) +
  scale_y_log10() +
  scale_fill_gradient2(name = "val", low = "darkblue", high = "darkred")
#> Warning: Duplicated aesthetics after name standardisation: pad

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

https://stackoverflow.com/questions/43795211

复制
相关文章

相似问题

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