在ggplot中复制hist断点而没有在plot之外的函数

时间:2018-05-06 22:07:41

标签: r ggplot2

直方图中断

在基础图中,当您使用hist函数时,它会使用nclass.Sturges函数自动计算中断,但在ggplot中,您必须提供中断。

如果我绘制经典忠实数据的直方图,我会得到以下图表:

data("faithful")
hist(faithful$waiting)

enter image description here

这有效

我在question中发现,你可以模仿

library(tidyverse)
data("faithful")
brx <- pretty(range(faithful$waiting), n = nclass.Sturges(faithful$waiting), min.n = 1)
ggplot(faithful, aes(waiting)) + 
  geom_histogram(color="darkgray", fill="white", breaks=brx)

enter image description here

但这不是

但是我想在我的ggplot函数中添加中断,所以我尝试了这个:

ggplot(faithful, aes(waiting)) + 
  geom_histogram(color="darkgray", fill="white", 
                 aes(breaks=pretty(range(waiting), 
                                   n = nclass.Sturges(waiting), 
                                   min.n = 1)))

这给了我以下错误:

Warning: Ignoring unknown aesthetics: breaks
Error: Aesthetics must be either length 1 or the same as the data (272): breaks, x

我理解这意味着什么,但我可以将长度为1的美学放在aes中,例如:

ggplot(faithful, aes(waiting)) + 
  geom_histogram(color="darkgray", fill="white", breaks=brx, 
                 aes(alpha = 0.5))

我做错了什么?

1 个答案:

答案 0 :(得分:0)

geom_histogram根据文档使用与aes相同的geom_barbreaks不是那些美学之一。 (见geom_bar

在工作代码块中,你直接传递给函数geom_histogram并且它可以工作,但是在有问题的块中你将它作为审美传递,并且ggplot会抱怨。

这对我有用,我想你做了什么:

ggplot(faithful, aes(x = waiting)) + 
geom_histogram(color = "darkgray", fill = "white", 
             breaks = pretty(range(faithful$waiting), 
                               n = nclass.Sturges(faithful$waiting), 
                               min.n = 1))