gpt4 book ai didi

r - 使用带有 scale_y_log10 的 geom_histogram 时如何抑制零

转载 作者:行者123 更新时间:2023-12-03 20:18:28 24 4
gpt4 key购买 nike

我正在尝试使用 ggplot、geom_histogram 和 scale_y_log10 绘制一个 log y 比例的直方图。大多数区域(计数大于 1 的区域)看起来是正确的:背景是透明的,直方图条形填充为默认颜色黑色。但是在计数为 1 时,颜色被反转:黑色背景和直方图条的透明填充。此代码(如下)生成图中的示例。

谁能解释一下原因?我了解对数刻度带来的问题,但我似乎无法找到解决方案。我希望有一个简单的解决方法,或者我忽略了一些东西。

set.seed(1)
df <- data.frame(E=sample(runif(100), 20, TRUE))
ggplot(df,aes(E)) + geom_histogram(binwidth=0.1) + scale_y_log10(limits=c(0.1,100)) + xlim(0,1)

Example of reversed color scheme below the count of 1

最佳答案

您可以添加 drop=TRUEgeom_histogram调用计数为零的垃圾箱(有关详细信息,请参阅 ?stat_bin):

set.seed(1)
df <- data.frame(E=sample(runif(100), 20, TRUE))
ggplot(df,aes(E)) +
geom_histogram(binwidth=0.1, drop=TRUE) +
scale_y_log10(limits=c(0.1,100)) +
xlim(0,1)

编辑:由于比例从 1 开始,因此不可能显示高度为 1 的条。如 this answer 中所述,您可以选择从不同级别开始,但可能会产生误导。无论如何,这是代码:
require(scales)
mylog_trans <-
function (base = exp(1), from = 0)
{
trans <- function(x) log(x, base) - from
inv <- function(x) base^(x + from)
trans_new("mylog", trans, inv, log_breaks(base = base), domain = c(base^from, Inf))
}

ggplot(df,aes(E)) +
geom_histogram(binwidth=0.1, drop=TRUE) +
scale_y_continuous(trans = mylog_trans(base=10, from=-1), limits=c(0.1,100)) +
xlim(0,1)

关于r - 使用带有 scale_y_log10 的 geom_histogram 时如何抑制零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23083819/

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