如何解决为什么双倍会完全破坏我堆积的条形图?
我正在尝试使用存储为X轴的两倍的数值和匹配记录数作为Y轴来制作堆叠的条形图。我也想展示一个绝对的价值。如果我的数值是整数,则可以正常工作。
我能想到的最简单的版本是一个图表,该图表使用starwars库为我提供了按性别划分的各种字符的身高图表。它工作正常。这段代码:
starwars %>%
count(height,gender) %>%
ggplot(aes(x = height,y = n,fill = gender)) + geom_col()
为了确保我能看到期望的值,我可以检查范围:
starwars %>%
count(height,gender) %>%
summarise(tall = max(height,na.rm = TRUE),short = min(height,most = max(n),least = min(n))
我不知道“高度”值使用什么单位,但是最高的字符是264个单位,而Yoda是66个单位。最频繁的身高出现7次。我敢肯定有一种更干净的方法来提取这些支票,但我可以确认图表与数字一致。
我的真实数据使用一个存储为x值而不是整数的数字值,它看上去很笨拙。因此,如果我使用《星际大战》数据(出生年份)的两倍来重复上面的图表,我会感到混乱。我什至不知道发生了什么。完全相同的代码,但X轴值不同:
starwars %>%
count(birth_year,gender) %>%
ggplot(aes(x = birth_year,fill = gender)) + geom_col()
产生一个旋转90°的图表,没有任何意义:
“出生年份”值的范围是8到896,最频繁的年份包含2个字符(31个不适用出生年份)。
两个图表之间的唯一区别是出生年份存储为双精度年份。为什么这会使图表变得疯狂,并且(更重要的是)如何解决它,所以我可以在x轴上看到实际的出生年份范围,并在一个条形图中显示该年份出生的字符数(按性别分组) ,在y轴上?
解决方法
这是内置在ggplot2
中的故意行为。
请记住,如第一张图片所示,使用geom_col
意味着您正在x轴上绘制离散元素,在y轴上绘制计数。当然,整数和因子自然可以认为是离散实体。另一方面,双精度数通常用于表示实数的近似值,因此我们倾向于不使用双精度数来表示离散实体。
在第二个图中,您的x变量是双精度向量,而您的y轴是整数(计数)向量。因此,ggplot
假定绘制此图的自然方法是将类别(或至少是离散的)y轴作为合并变量,而x轴作为连续变量。
此行为记录在geom_col
的帮助文件中:
方向:图层的方向。默认值(NA)根据美感图自动确定方向。在极少数情况下,如果失败,可以通过将方向设置为“ x”或“ y”来明确给出。有关更多详细信息,请参见“定向”部分。
因此,解决此问题的“正确”方法是:
starwars %>%
count(birth_year,gender) %>%
ggplot(aes(x = birth_year,y = n,fill = gender)) +
geom_col(orientation = "x")
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。