【问题标题】:Histogram in ggplot does not start at zero on X axis [closed]ggplot中的直方图不在X轴上从零开始[关闭]
【发布时间】:2018-11-30 21:37:07
【问题描述】:

所以,这是第一次使用 ggplot 制作直方图,我看到的是,对于我的数据,导出的直方图如下所示。

我不喜欢的是,第一个 bin 不包括零,它从大约 5 或 6 开始。有没有人遇到过这样的事情?

我使用了一系列的 binwidth,从 1 到 20,而且它一直在这样做。

数据:

structure(list(V1 = c(8, 4.4, 9.4, 29.4, 135.6, 65, 70.9, 15.2, 38.8, 87.2, 5.2, 0.2, 7.8, 46.4, 35.9, 77.4, 34.2, 157.4, 46.4, 19, 43.8, 41.2, 96.8, 25.6, 40.2, 111.8, 111.8, 49.8, 39.4, 9.6, 11.6, 8.6, 44.2, 41, 4.6, 36.2, 12.4, 45.8, 0, 30.8, 134.6, 167.2, 13.8, 56.6, 112.3, 13.6, 18.8, 18.2, 7, 40.4, 30.8, 130.2, 234.6, 106.2, 87.2, 15, 7.6, 63, 18, 2.6, 28, 24, 153.2, 24.4, 69.6, 27, 134, 181.6, 46, 85.4, 18.6, 32, 83.6, 42.6, 32.8, 127.5, 92.8, 122, 129.6, 35.4, 20.6, 88, 14.8, 12.8, 33.8, 58.6, 104.2, 0.2)), class = "data.frame", row.names = c(NA, -88L))

代码:

library(ggplot2)
library(scales)
dat = read.csv('mo.csv')
p2=ggplot(dat, aes(x = dat$v2)) +
  geom_histogram(color="black", fill="grey40", bins=25)+ 
  scale_x_continuous(breaks = seq(0, 255, 25), limits = c(0,255), expand=c(0,0))+
  scale_y_continuous(expand = c(0,0),limits = c(0,16.5), breaks = pretty(dat$v2, n = 140))
p2

【问题讨论】:

  • 欢迎来到 StackOverflow。请参阅 how to ask a questionhow to make a great reproducible example 以帮助其他人回答您的问题。没有看到数据和你正在使用的代码,很难说。您可能没有低于 5 或​​ 6 的数据。
  • 这个答案可能会有所帮助:stackoverflow.com/a/46453008/8583393
  • 感谢您的回答。我的整个数据集只包含大约 100 个值。低于 5 或​​ 6 的分别是:0、0.2、0.2、2.6、4.4、4.6、5.2。上图的 Binwidth 设置为 10。
  • 您好@userwrld_is,请将您的代码和数据发布到您的原始问题中。
  • 你好@Roman。我刚刚更新了这个问题。希望它有所帮助。

标签: r ggplot2 histogram


【解决方案1】:
ggplot(dat, aes(x = dat$V1)) +
  geom_histogram(color="black", fill="grey40", bins=20)+
  scale_x_continuous(breaks = seq(0,250,25))+
  scale_y_continuous(expand = c(0,0),limits = c(0,16.5), breaks = pretty(dat$V1, n = 140))

这似乎是您正在寻找的。虽然 25 个 bin 看起来比 20 个更好,但 imo。

【讨论】:

  • 您好@Jared C。我无法删除limits = c(0,255),否则breaks = seq(0, 255, 25) 不起作用。谢谢你。编辑:它有效,但它只能上升到 225,我希望它也上升到 250。这就是我放置限制命令的原因。
  • 试试我更新的代码。它从 0 开始,最后包括 250。
  • 谢谢伙计。这样更好。我的,一直没有工作,因为expand = c(0,0)breaks 之后
【解决方案2】:

使用您的数据和最简单的可视化,我得到:

您确定您使用的是正确的变量(列)吗?尝试运行下面的代码。

顺便说一句:在ggplot2中,aes()调用中不需要指定数据源。此外,在大多数情况下,使用<- 作为赋值运算符(不是=,与许多编程语言相反)是recommended practice

代码

ggplot(data, aes(V1)) +
    geom_histogram(color = "black", fill = "grey40", bins = 25)

数据

data <- structure(list(V1 = c(8, 4.4, 9.4, 29.4, 135.6, 65, 70.9, 15.2, 38.8, 87.2, 5.2, 0.2, 7.8, 46.4, 35.9, 77.4, 34.2, 157.4, 46.4, 19, 43.8, 41.2, 96.8, 25.6, 40.2, 111.8, 111.8, 49.8, 39.4, 9.6, 11.6, 8.6, 44.2, 41, 4.6, 36.2, 12.4, 45.8, 0, 30.8, 134.6, 167.2, 13.8, 56.6, 112.3, 13.6, 18.8, 18.2, 7, 40.4, 30.8, 130.2, 234.6, 106.2, 87.2, 15, 7.6, 63, 18, 2.6, 28, 24, 153.2, 24.4, 69.6, 27, 134, 181.6, 46, 85.4, 18.6, 32, 83.6, 42.6, 32.8, 127.5, 92.8, 122, 129.6, 35.4, 20.6, 88, 14.8, 12.8, 33.8, 58.6, 104.2, 0.2)), class = "data.frame", row.names = c(NA, -88L))

【讨论】:

  • 感谢您的帮助。我使用的是相同的数据,起初我得到的情节和你一样。这一次也很奇怪,垃圾箱在零之前开始。当我添加limits = c(0,250) 时,只是外观发生了变化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多