gpt4 book ai didi

r - 频率计数直方图仅在 y 轴上显示整数值?

转载 作者:行者123 更新时间:2023-12-02 18:47:05 30 4
gpt4 key购买 nike

非常感谢任何人帮助解决这个问题。看起来应该很简单,但经过几个小时的实验后,我不得不停下来寻求帮助。预先非常感谢您!

问题摘要:

如何确保在 ggplot2 中直方图的 y 轴仅使用整数(频率计数值)而不是小数进行标记?

迄今为止尝试的函数、参数和数据类型更改包括:

  • geom_histogram()geom_bar()geom(col) - 在每种情况下,包括或不包括参数 stat = "identity" 相关的。
  • 添加 +scale_y_discrete(),带或不带 +scale_x_discrete()
  • 将基础计数数据转换为因子和/或分箱数据转换为因子

理想情况下,解决方案将使用 baseR 或 ggplot2,而不是其他外部依赖项,例如通过使用 scales 包中的函数 pretty_breaks() func 或类似函数。

示例数据:

sample <- data.frame(binMidPts = c(4500,5500,6500,7500), counts = c(8,0,9,3))

x 轴由连续变量的箱组成,y 轴旨在显示这些箱中的观测值计数。例如,Bin 1 覆盖 x 轴范围 [4000 <= x < 5000],中点为 4500,在该 bin/范围内观察到 8 个数据点。

几乎可以工作的代码:

以下代码生成一个与我正在寻找的图表类似的图表,但是 y 轴在分隔符上标有小数值(这些值无效,因为数据是整数计数值)。

ggplot(data = sample, aes (x = binMidPts, y = counts)) + geom_col()

这段代码生成的图表是: Simple geom_col plot with "incorrect" continuous y-axis

我意识到我可以将中断/标签硬编码到 scale_y_continuous() 轴上,但是 (a) 我更喜欢灵活的解决方案来应用于比例不合适的许多不同大小的数据集事先不知道,并且 (b) 我希望必须有一种更简单的方法来生成基本直方图。

引用文献

我查阅了许多 Stack Overflow 问题、ggplot2 手册 ( https://ggplot2.tidyverse.org/reference/scale_discrete.html )、sthda.com 示例和各种博客。这些往往会解决相关问题,例如使用 scale_y_continuous,或者基础数据集中没有计数数据,因此依赖 stat_bin() 进行转换。

任何帮助将不胜感激!谢谢。

//更新 1 - 将比例扩展到零

本线程的 future 读者可能会发现,了解由 base::pretty() 形成的中断值的范围不一定扩展到零会很有帮助。因此,轴刻度可能会忽略零和中断下限范围之间的值,如下所示: y axis breaks omitted below the lower range of pretty()

为了解决这个问题,我在 range() 参数中包含了“0”,即:

ggplot(data = sample, aes (x = binMidPts, y = counts)) + geom_col() +
scale_y_continuous(breaks=round(pretty(range(0,sample$counts))))

它给出了 y 轴上所需的满刻度,因此:

y axis scale extends to zero

最佳答案

怎么样:


ggplot(data = sample, aes (x = binMidPts, y = counts)) + geom_col() +
scale_y_continuous( breaks=round(pretty( range(sample$counts) )) )

enter image description here

This answer建议使用 scales 包中的 pretty_breakspretty_breaks的手册页提到pretty来自基地。然后您只需将其四舍五入到最接近的整数即可。

关于r - 频率计数直方图仅在 y 轴上显示整数值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67295766/

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