gpt4 book ai didi

r - 使用 ggplot2 时,我可以设置直方图条的颜色而不会掩盖低值吗?

转载 作者:行者123 更新时间:2023-12-04 10:34:32 24 4
gpt4 key购买 nike

打电话时geom_histogram()color , 和 fill参数,ggplot2会混淆整个 x 轴范围,从而无法在视觉上区分低值和零值。

运行以下代码:

ggplot(esubset, aes(x=exectime)) + geom_histogram(binwidth = 0.5) +
theme_bw() + scale_x_continuous(breaks=seq(0,20), limits=c(0,20))

会导致

a histogram w/o color attributes

这在视觉上非常不吸引人。为了解决这个问题,我想改用
ggplot(esubset, aes(x=exectime)) + geom_histogram(binwidth = 0.5,
colour='black', fill='gray') + theme_bw() +
scale_x_continuous(breaks=seq(0,20), limits=c(0,20))

这将导致

a histogram with color attributes

问题是我无法区分是否 exectime包含超过 10 的值,例如,少数出现的 12 将隐藏在跨越整个 x 轴的水平线后面。

最佳答案

使用 coord_cartesian而不是 scale_x_continuous . coord_cartesian设置轴范围而不影响数据的绘制方式。即使与 coord_cartesian ,您仍然可以使用 scale_x_continuous设置 breaks ,但是 coord_cartesian将覆盖 scale_x_continuous 的任何效果关于如何绘制数据。

在下面的假数据中,请注意我已经添加了一些非常小的条形数据。

set.seed(4958)
dat = data.frame(value=c(rnorm(5000, 10, 1), rep(15:20,1:6)))

ggplot(dat, aes(value)) +
geom_histogram(binwidth=0.5, color="black", fill="grey") +
theme_bw() +
scale_x_continuous(limits=c(5,25), breaks=5:25) +
ggtitle("scale_x_continuous")

ggplot(dat, aes(value)) +
geom_histogram(binwidth=0.5, color="black", fill="grey") +
theme_bw() +
coord_cartesian(xlim=c(5,25)) +
scale_x_continuous(breaks=5:25) +
ggtitle("coord_cartesian")

enter image description here

正如你在上面的图中看到的,如果数据范围内有 count=0 的 bin,ggplot 会添加一个零线,即使是 coord_cartesian .这使得很难看到 15 处的高度 = 1 的条。您可以使用 lwd 使边框更薄参数(“线宽”),以便较小的条形不会被遮挡:
ggplot(dat, aes(value)) +
geom_histogram(binwidth=0.5, color="black", fill="grey", lwd=0.3) +
theme_bw() +
coord_cartesian(xlim=c(5,25)) +
scale_x_continuous(breaks=5:25) +
ggtitle("coord_cartesian")

enter image description here

另一种选择是使用 geom_bar 预先汇总数据和绘图。为了在条形之间留出空间,从而避免需要边界线来标记条形边缘:
library(dplyr)
library(tidyr)
library(zoo)

bins = seq(floor(min(dat$value)) - 1.75, ceiling(max(dat$value)) + 1.25, 0.5)

dat.binned = dat %>%
count(bin=cut(value, bins, right=FALSE)) %>% # Bin the data
complete(bin, fill=list(n=0)) %>% # Restore empty bins and fill with zeros
mutate(bin = rollmean(bins,2)[-length(bins)]) # Convert bin from factor to numeric with value = mean of bin range

ggplot(dat.binned, aes(bin, n)) +
geom_bar(stat="identity", fill=hcl(240,100,30)) +
theme_bw() +
scale_x_continuous(breaks=0:21)

enter image description here

关于r - 使用 ggplot2 时,我可以设置直方图条的颜色而不会掩盖低值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37758256/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com