- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 ggplot 2.1.0 来绘制直方图,并且我有一个关于直方图箱的意外行为。
我在这里放了一个带有左封闭 bin(即 [ 0, 0.1 [ ),binwidth 为 0.1 的示例。
mydf <- data.frame(myvar=c(-1,-0.5,-0.4,-0.1,-0.1,0.05,0.1,0.1,0.25,0.5,1))
myplot <- ggplot(mydf, aes(myvar)) + geom_histogram(aes(y=..count..),binwidth = 0.1, boundary=0.1,closed="left")
myplot
ggplot_build(myplot)$data[[1]]
最佳答案
编辑:以下描述的问题已在 ggplot2
的最新版本中得到修复。 .
正如 Roland 的评论中所建议的那样,您的问题是可重现的,并且似乎是由舍入错误引起的。在这一点上,这在我看来就像版本 ggplot2_2.0.0
中引入的错误。 .我在下面推测它的起源,但首先让我提出一个基于 boundary
的解决方法。选项。
问题 :
df <- data.frame(var = seq(-100,100,10)/100)
as.list(df) # check the data
$var
[1] -1.0 -0.9 -0.8 -0.7 -0.6 -0.5 -0.4 -0.3 -0.2
[10] -0.1 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7
[19] 0.8 0.9 1.0
library("ggplot2")
p <- ggplot(data = df, aes(x = var)) +
geom_histogram(aes(y = ..count..),
binwidth = 0.1,
boundary = 0.1,
closed = "left")
p
boundary
参数 .在这个例子中,设置略低于 1,比如 0.99,有效。您的用例也应该可以进行调整。
ggplot(data = df, aes(x = var)) +
geom_histogram(aes(y = ..count..),
binwidth = 0.05,
boundary = 0.99,
closed = "left")
eps
)。在
ggplot2
模糊度乘以 1e-7(早期版本)或 1e-8(后期版本)。
ncount
中问题明显:
str(ggplot_build(p)$data[[1]])
## 'data.frame': 20 obs. of 17 variables:
## $ y : num 1 1 1 1 1 2 1 1 1 0 ...
## $ count : num 1 1 1 1 1 2 1 1 1 0 ...
## $ x : num -0.95 -0.85 -0.75 -0.65 -0.55 -0.45 -0.35 -0.25 -0.15 -0.05 ...
## $ xmin : num -1 -0.9 -0.8 -0.7 -0.6 -0.5 -0.4 -0.3 -0.2 -0.1 ...
## $ xmax : num -0.9 -0.8 -0.7 -0.6 -0.5 -0.4 -0.3 -0.2 -0.1 0 ...
## $ density : num 0.476 0.476 0.476 0.476 0.476 ...
## $ ncount : num 0.5 0.5 0.5 0.5 0.5 1 0.5 0.5 0.5 0 ...
## $ ndensity: num 1.05 1.05 1.05 1.05 1.05 2.1 1.05 1.05 1.05 0 ...
## $ PANEL : int 1 1 1 1 1 1 1 1 1 1 ...
## $ group : int -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ...
## $ ymin : num 0 0 0 0 0 0 0 0 0 0 ...
## $ ymax : num 1 1 1 1 1 2 1 1 1 0 ...
## $ colour : logi NA NA NA NA NA NA ...
## $ fill : chr "grey35" "grey35" "grey35" "grey35" ...
## $ size : num 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 ...
## $ linetype: num 1 1 1 1 1 1 1 1 1 1 ...
## $ alpha : logi NA NA NA NA NA NA ...
ggplot_build(p)$data[[1]]$ncount
## [1] 0.5 0.5 0.5 0.5 0.5 1.0 0.5 0.5 0.5 0.0 1.0 0.5
## [13] 0.5 0.5 0.0 1.0 0.5 0.0 1.0 0.5
df <- data.frame(var = as.integer(seq(-100,100,10)))
# eps <- 1.000000000000001 # on my system
eps <- 1+10*.Machine$double.eps
p <- ggplot(data = df, aes(x = eps*var/100)) +
geom_histogram(aes(y = ..count..),
binwidth = 0.05,
closed = "left")
p
boundary
选项)
ggplot2_1.0.1
一段时间后出现.查看源代码,例如
bin.R
和
stat-bin.r
在
https://github.com/hadley/ggplot2/blob/master/R
,并跟踪
count
的计算导致功能
bin_vector()
,其中包含以下几行:
bin_vector <- function(x, bins, weight = NULL, pad = FALSE) {
... STUFF HERE I HAVE DELETED FOR CLARITY ...
cut(x, bins$breaks, right = bins$right_closed,
include.lowest = TRUE)
... STUFF HERE I HAVE DELETED FOR CLARITY ...
}
"patching"
bin_vector
函数并将输出打印到屏幕上,看起来:
bins$fuzzy
正确存储模糊参数 bins$breaks
用于计算,但据我所知(如果我错了,请纠正我)bins$fuzzy
不是。 bins$breaks
与 bins$fuzzy
顶部 bin_vector
,返回正确的图。不是一个错误的证明,而是一个建议,也许可以做更多的事情来模拟 ggplot2
以前版本的行为。 . bin_vector
我希望找到一个条件来返回 bins$breaks
或 bins$fuzzy
.我认为现在缺少了。 "patch"
bin_vector
函数,从 github 源复制函数定义,或者更方便的是,从终端复制函数定义,使用:
ggplot2:::bin_vector
library("ggplot2")
bin_vector <- function (x, bins, weight = NULL, pad = FALSE)
{
... STUFF HERE I HAVE DELETED FOR CLARITY ...
## MY PATCH: Replace bins$breaks with bins$fuzzy
bin_idx <- cut(x, bins$fuzzy, right = bins$right_closed,
include.lowest = TRUE)
... STUFF HERE I HAVE DELETED FOR CLARITY ...
ggplot2:::bin_out(bin_count, bin_x, bin_widths)
## THIS IS THE PATCHED FUNCTION
}
assignInNamespace("bin_vector", bin_vector, ns = "ggplot2")
df <- data.frame(var = seq(-100,100,10)/100)
ggplot(data = df, aes(x = var)) + geom_histogram(aes(y = ..count..), binwidth = 0.05, boundary = 1, closed = "left")
detach
您当前加载的
ggplot2
.
2.0.9.3
或
2.1.0.1
并且似乎源自当前版本
2.2.0.1
(或者可能是更早的
2.2.0.0
,当我尝试调用它时给了我一个错误)。
ggplot2_0.9.3
, 创建一个单独的目录(覆盖当前版本没有意义),比如
ggplot2093
:
URL <- "http://cran.r-project.org/src/contrib/Archive/ggplot2/ggplot2_0.9.3.tar.gz"
install.packages(URL, repos = NULL, type = "source",
lib = "~/R/testing/ggplot2093")
library("ggplot2", lib.loc = "~/R/testing/ggplot2093")
关于r - geom_histogram : wrong bins?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37876096/
我正在添加 color美观的多面直方图。在下面的表示中,没有颜色美学,直方图仅显示该方面级别内的数据。但是,使用 color定义后,将添加一个基线,该基线将延伸范围包括所有方面的数据范围。有没有办法让
我很惊讶 geom_histogram 没有按预期工作。我有一个具有以下特征的数据集: > dim(f) [1] 102095 1 > max(f) [1] 4239900 > min(f)
我正在使用 ggplot 2.1.0 来绘制直方图,并且我有一个关于直方图箱的意外行为。 我在这里放了一个带有左封闭 bin(即 [ 0, 0.1 [ ),binwidth 为 0.1 的示例。 my
我正在尝试绘制一个 geom_histogram,其中条形图由渐变着色。 这就是我想要做的: library(ggplot2) set.seed(1) df <- data.frame(id=past
具有范围从 0.42 到 1 的数据: > summary(performance$SPC8) Min. 1st Qu. Median Mean 3rd Qu. Max. 0.4
我正在尝试使用 geom_historgram 来可视化考试中分数的成绩分布,同时填写字母成绩(A、B、C、D、F)。由于某种原因,填充颜色溢出到了错误的类别中。我已经对照分数检查了字母等级列,看起来
构建直方图后,我想为我的绘图添加一个上边界/轮廓。我不想使用 geom_bar或 geom_col因为我不想要每个箱子的垂直边界。 我的尝试包括使用 geom_histogram和 stat_bin(
我有这个代码 ggplot() + geom_histogram(aes(x=V1, y=(..count..)/sum(..count..)), fill="red", alpha=.4, colo
我有以下代码: library(ggplot2) data(mtcars) ggplot(mtcars, aes(x=mpg)) + geom_histogram(bins=15, colour='r
我想在 ggplot2 中的分布条形图中添加一条线以显示平均分布,但我遇到了麻烦。 像这样的 ggplot 调用: ggplot(x, aes(date_received)) + geom_h
假设我想制作直方图 所以我使用以下代码 v100<-c(runif(100)) v100 library(ggplot2) private_plot<-ggplot()+aes(v100)+geom_
我绘制了一个直方图,其中 x 轴为工资,y 轴显示数据集中具有此特定工资的个人百分比。现在,我希望各个条形图显示每个条形图中有多少观察值。例如,在我提供的 sample_data 中,10% 条中有多
我正在尝试创建一个连续变量 (1-10) 的直方图,并在一侧稍加一个条,表示向量中有多少个 NA。我正在使用 ggplot2 中的 geom_histogram()。这是一个例子: v % group
我的问题是用组显示直方图列百分比(在 ggplot 中)。 我有两组,我绘制直方图 例子: ggplot(data, aes(x = variable)) + geom_histogram(a
我正在尝试使用 ggplot、geom_histogram 和 scale_y_log10 绘制一个 log y 比例的直方图。大多数区域(计数大于 1 的区域)看起来是正确的:背景是透明的,直方图条
我想在直方图上绘制一条垂直线,其中分面后数据的中位数。我想用 stat_summary 来做这件事如下所示。这种方法的问题是 y 轴的比例不正确 我想这是因为我调用 ggplot(aes(x=data
我尝试使用 facet_grid()首次。我用自己的数据绘制了直方图,当我手动计算图形上的框时,分布似乎不准确。我使用 mtcars 复制了我的代码数据,问题似乎仍然存在。 这是 ggplot 生成的
我忘记了一些非常基本的东西,这可以解释为什么我在对 y 轴进行 log10 变换后看到非常膨胀的 y 值。 我有以下堆叠的 ggplot + geom_histogram。 ggTherapy `s
我想用ggplot绘制直方图(或使用 stat_bin 绘制阶梯图)并使用 geom_point 在其上叠加几个点. 这是一个 base执行: library(plotrix) set.seed(10
我想制作一个颜色编码的直方图,但遇到了问题。 我在 R 3.1.1 上使用 ggplot 下面看到的初始尝试,只要 indicators 就可以正常工作是数字。当将 indicators 更改为字符串
我是一名优秀的程序员,十分优秀!