gpt4 book ai didi

r - ggplot2 geom_bar位置失败

转载 作者:行者123 更新时间:2023-12-02 18:01:28 25 4
gpt4 key购买 nike

我在 geom_bar 中使用 ..count.. 转换并收到警告当我的某些类别计数很少时,position_stack 需要不重叠的 x 间隔

使用一些模拟数据可以最好地解释这一点(我的数据涉及方向和风速,我保留与此相关的名称)

#make data
set.seed(12345)
FF=rweibull(100,1.7,1)*20 #mock speeds
FF[FF>60]=59
dir=sample.int(10,size=100,replace=TRUE) # mock directions

#group into speed classes
FFcut=cut(FF,breaks=seq(0,60,by=20),ordered_result=TRUE,right=FALSE,drop=FALSE)

# stuff into data frame & plot
df=data.frame(dir=dir,grp=FFcut)
ggplot(data=df,aes(x=dir,y=(..count..)/sum(..count..),fill=grp)) + geom_bar()

这工作得很好,结果图显示了根据速度分组的方向的频率。具有相关性的是,计数最少的速度类别(此处为“[40,60)”)将具有 5 个计数。 Three categories of size 20 each

然而,更多的速度等级会导致警告。例如,与

FFcut=cut(FF,breaks=seq(0,60,by=15),ordered_result=TRUE,right=FALSE,drop=FALSE)

计数最少的速度类别(现在为“[45,60)”)将只有 3 个计数,ggplot2 将发出警告

position_stack 需要不重叠的 x 间隔

并且该图将显示该类别中沿 x 轴分布的数据。 Four categories of size 15 each. Now the last one with three elements is not added on top of the corresponding bar看来 5 是一个组才能正常工作的最小规模。

我很想知道这是否是 stat_bin(geom_bar 正在使用)中的一个功能或错误,或者我是否只是滥用 geom_bar >.

此外,如果有任何解决此问题的建议,我们将不胜感激。

真诚的

最佳答案

发生这种情况是因为 df$dir 是数字,因此 ggplot 对象假定连续的 x 轴,并且美学参数 group 基于唯一已知的离散变量 ( fill = grp)。

因此,当 grp = [45,60) 中根本没有那么多 dir 值时,ggplot 会对每个条的宽度感到困惑。如果我们将图分成不同的方面,这在视觉上会变得更加明显:

ggplot(data=df,
aes(x=dir,y=(..count..)/sum(..count..),
fill = grp)) +
geom_bar() +
facet_wrap(~ grp)

facet view

> for(l in levels(df$grp)) print(sort(unique(df$dir[df$grp == l])))
[1] 1 2 3 4 6 7 8 9 10
[1] 1 2 3 4 5 6 7 8 9 10
[1] 2 3 4 5 7 9 10
[1] 2 4 7

我们还可以手动检查排序的 df$dir 值之间的最小差异对于前三个 grp 值是 1,但对于最后一个值是 2。因此默认的条形宽度更宽。

以下解决方案应该都达到相同的结果:

<强>1。在geom_bar()中为所有组显式指定相同的条形宽度:

ggplot(data=df,
aes(x=dir,y=(..count..)/sum(..count..),
fill = grp)) +
geom_bar(width = 0.9)

<强>2。将 dir 转换为分类变量,然后将其传递给 aes(x = ...):

ggplot(data=df,
aes(x=factor(dir), y=(..count..)/sum(..count..),
fill = grp)) +
geom_bar()

<强>3。指定 group 参数应基于 df$dirdf$grp:

ggplot(data=df,
aes(x=dir,
y=(..count..)/sum(..count..),
group = interaction(dir, grp),
fill = grp)) +
geom_bar()

plot

关于r - ggplot2 geom_bar位置失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50604055/

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