不是最方便的方法,但是您可以从外部计算容器高度(也许有帮助:https://r.789695.n4.nabble.com/hist-data-without-plot-td796275.html),然后过滤合并的数据,然后绘制提供x和y美观度以及stat =“ identity”的直方图
或者以很少的观察结果物理地删除垃圾箱(例如,如果您想将合并的数据重用于其他内容),则可以使用第三个布尔变量来描述每一行(例如垃圾箱)是否符合您的条件并使用它作为填充色。然后设置scale_fill_manual(values = c(“ transparent”,“ black”)),这将使标准列中具有FALSE的垃圾箱透明。
,
这是可行的,我的建议是您必须事先确定垃圾箱,否则过滤就没有意义了。
我们从您的示例开始:
library(ggplot2)
library(gridExtra)
set.seed(1234)
df <- data.frame(
weight=round(c(rnorm(200,mean=55,sd=5),rnorm(200,mean=65,sd=5)))
)
我们需要定义垃圾箱,在这种情况下,我们每1步都有一个垃圾箱,例如40,41,42。
BREAKS = seq(floor(min(df$weight)),ceiling(max(df$weight)),1)
p1 <- ggplot(df,aes(x=weight)) +
geom_histogram(breaks=BREAKS) +
stat_bin(aes(y=..count.. + 2,label=..count..),breaks=BREAKS,geom="text")
我们还可以使用基数R中的hist函数手动计算此值并将其绘制为条形图:
h <- hist(df$weight,plot=FALSE)
dat <- data.frame(weight=h$mids,n=h$counts)
p2 <- ggplot(dat,aes(x=weight,y=n)) +
geom_col() + geom_text(aes(label=n),vjust=-0.5,size=3)
我们将它们放在一起,除了外观上的细微差别外,它们是相同的
我们定义了临界值,并绘制了列表计数的子集:
CUTOFF=2
ggplot(subset(dat,n>CUTOFF),size=3)
,
使用ggplot2实际上很容易。我认为情节本身没有任何意义,但是这个想法可能在此范围之外具有实用性。您可以在ifelse
内使用aes()
条条件。
library("ggplot2")
## set superior seed ;)
set.seed(42)
df <- data.frame(
weight=round(c(rnorm(200,sd=5)))
)
p <- ggplot(df,aes(x=weight)) +
geom_histogram() +
stat_bin(aes(y=..count.. + 2,geom="text")
p
#> `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
#> `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
p <- ggplot(df,y = ifelse(..count.. > 2,..count..,0))) +
geom_histogram() +
stat_bin(aes(label=..count..),geom="text")
p
#> `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
#> `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
由reprex package(v0.3.0)于2019-11-13创建
本文链接:https://www.f2er.com/3111575.html