【问题标题】:Coloring a geom_histogram by "label fraction" in a R dataframe?通过 R 数据框中的“标签分数”为 geom_histogram 着色?
【发布时间】:2019-12-23 12:52:47
【问题描述】:

假设我有如下数据框:

df <- data.frame(x = runif(100))
df$x2 = df$x*100
cut = quantile(df$x2, 0.75)
df$label = ifelse(df$x2>cut, 1, 0)

          x       x2 label
1 0.1431888 14.31888     0
2 0.9131599 91.31599     1
3 0.5659831 56.59831     0
4 0.8358059 83.58059     1
5 0.3125397 31.25397     0
6 0.8823542 88.23542     1

任务是:

首先,显示x的直方图,可以使用geom_histogram()来完成

其次,在每个 bin 中,我想通过该 bin 中 label 等于 1 的分数为 bin 着色。

我对如何实现它感到困惑。因为我需要知道这个bin中1的个数和这个bin中point的个数,这对我来说很难做到(binwidth不是固定的)。由于我在网站上搜索,但只发现geom_histogram() 的颜色由x 改变,例如在这个link 中。

我想要的输出结果是这样的:

:

图片由以下代码生成:

ggplot(df, aes(x = x, fill = ..x..)) + geom_histogram()

但在此示例中,颜色取决于每个 bin 中的x。但是,我希望颜色取决于每个 bin 中标签的分数等于 1(第三列)。

【问题讨论】:

  • 请出示您的ggplot2 代码示例,并可能提供当前和预期的地块示例。
  • 我在 Add 中添加了预期的绘图和示例代码

标签: r ggplot2 histogram


【解决方案1】:

我们可以使用 hist 函数手动创建中断和计数,这样我们就可以在直方图的每个 bin 内对标签进行均值:

library(dplyr)

H = hist(df$x,breaks=30,plot=FALSE)
plotdf <- df %>% 
mutate(bins=cut(df$x,breaks=H$breaks,bins=H$mids)) %>%
group_by(bins) %>%
summarise(label=mean(label),n=length(bins)) 

从这里开始,我们将 x 绘制为 bin,y 绘制为计数数,并用标签的平均数填充它 == 1:

ggplot(plotdf,aes(x=bins,y=n,fill=label)) + geom_col()+
scale_fill_gradient2(low="#f6e1e1",mid="#ff9d76",high="#eb4d55")+
scale_x_discrete(labels=H$mids)

【讨论】:

  • 我还有一个问题,如何调整 geom_col() 宽度以关闭每个条之间的空白?在这种情况下,我尝试设置 geom_col(width=0.05),但宽度变得更小。 -_- 谢谢~
  • @XiWang,试试 geom_col(width=0.98,col="black")?
  • thx~ 我终于设置了 geom_col(width=1,color="black")。效果很好。
猜你喜欢
  • 2017-10-03
  • 2021-04-15
  • 1970-01-01
  • 2020-05-30
  • 2020-12-30
  • 2023-03-19
  • 1970-01-01
  • 2017-12-28
  • 1970-01-01
相关资源
最近更新 更多