研究 x、y 和 z 变量在 diamonds 数据集中的分布。你能发现什么?思考一下,对于一条钻石数据,如何确定表示长、宽和高的变量?
summary(select(diamonds, x, y, z))
#> x y z
#> Min. : 0.00 Min. : 0.0 Min. : 0.0
#> 1st Qu.: 4.71 1st Qu.: 4.7 1st Qu.: 2.9
#> Median : 5.70 Median : 5.7 Median : 3.5
#> Mean : 5.73 Mean : 5.7 Mean : 3.5
#> 3rd Qu.: 6.54 3rd Qu.: 6.5 3rd Qu.: 4.0
#> Max. :10.74 Max. :58.9 Max. :31.8
ggplot(diamonds) +
geom_histogram(mapping = aes(x = x), binwidth = 0.01)
ggplot(diamonds) +
geom_histogram(mapping = aes(x = y), binwidth = 0.01)
ggplot(diamonds) +
geom_histogram(mapping = aes(x = z), binwidth = 0.01)
从分布中可以看出几个特征:
结论:x是长度,y是宽度,z是深度。因为长度总是小于宽度,否则长度就叫做宽度。通过搜索钻石长度、宽度和深度的定义。深度可以表示为钻石的长度/宽度的百分比,这意味着它应该小于长度和宽度。
研究 price 的分布,你能发现不寻常或令人惊奇的事情吗?(提示:仔细考虑一下binwidth 参数,并确定试验了足够多的取值。)
改变binwidth
参数就可以查看不同范围内的变量分布啦,下面是几个示例,根据画的图可以找到很多有趣的信息哟,赶紧试试吧!
ggplot(filter(diamonds, price < 2500), aes(x = price)) +
geom_histogram(binwidth = 10, center = 0)
ggplot(filter(diamonds), aes(x = price)) +
geom_histogram(binwidth = 100, center = 0)
diamonds %>%
mutate(ending = price %% 10) %>%
ggplot(aes(x = ending)) +
geom_histogram(binwidth = 1, center = 0)
diamonds %>%
mutate(ending = price %% 100) %>%
ggplot(aes(x = ending)) +
geom_histogram(binwidth = 1)
0.99 克拉的钻石有多少?1 克拉的钻石有多少?造成这种区别的原因是什么?
diamonds %>%
filter(carat >= 0.99, carat <= 1) %>%
count(carat)
#> # A tibble: 2 x 2
#> carat n
#> <dbl> <int>
#> 1 0.99 23
#> 2 1 1558
比较并对比 coord_cartesina() 和 xlim()/ylim() 在放大直方图时的功能。如果不设置binwidth 参数,会发生什么情况?如果将直方图放大到只显示一半的条形,那么又会发生什么情况?
在计算和绘制图形后,coord_cartesian()
函数将放大由限制指定的区域。因为已经计算了直方图容器,所以它不受影响。
ggplot(diamonds) +
geom_histogram(mapping = aes(x = price)) +
coord_cartesian(xlim = c(100, 5000), ylim = c(0, 3000))
#> `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
但是,在计算与直方图相关的统计数据之前xlim()
和ylim()
函数会影响操作。因此,在计算箱子宽度和计数之前,将删除x和y界限之外的值。这可能会影响直方图的外观。