gpt4 book ai didi

r - 如何使用对数刻度和离散值改进 ggplot 直方图的方面

转载 作者:行者123 更新时间:2023-12-04 10:18:03 25 4
gpt4 key购买 nike

我正在尝试提高离散值直方图的清晰度和方面,我需要用对数标度表示。

请考虑以下 MWE

set.seed(99)
data <- data.frame(dist = as.integer(rlnorm(1000, sdlog = 2)))
class(data$dist)
ggplot(data, aes(x=dist)) + geom_histogram()

产生

enter image description here

进而
ggplot(data, aes(x=dist)) + geom_line() + scale_x_log10(breaks=c(1,2,3,4,5,10,100))

这可能更糟

enter image description here

因为现在它给人的印象是“1”和“2”之间缺少某些东西,并且也不完全清楚哪个柱的值是“1”(柱在刻度线的右侧)和哪个柱的值是“2” "(条形图位于勾号的左侧)。

我知道从技术上讲 ggplot 为对数刻度提供了“正确”的视觉答案。然而,作为观察者,我在理解它时遇到了一些问题。

有没有可能改进一些东西?

编辑:

当我将 Jaap 解决方案应用于我的真实数据时会发生这种情况

enter image description here

x=0 和 x=1 之间以及 x=1 和 x=2 之间的下降从何而来?我的值是离散的,但是为什么该图还映射 x=1.5 和 x=2.5?

最佳答案

首先想到的是玩binwidth .但这也没有给出一个很好的解决方案:

ggplot(data, aes(x=dist)) +
geom_histogram(binwidth=10) +
scale_x_continuous(expand=c(0,0)) +
scale_y_continuous(expand=c(0.015,0)) +
theme_bw()

给出:
enter image description here

在这种情况下,最好使用密度图。但是,当您使用 scale_x_log10 时您将收到一条警告消息 ( Removed 524 rows containing non-finite values (stat_density) )。这可以通过使用 来解决。日志加一转型。

以下代码:
library(ggplot2)
library(scales)

ggplot(data, aes(x=dist)) +
stat_density(aes(y=..count..), color="black", fill="blue", alpha=0.3) +
scale_x_continuous(breaks=c(0,1,2,3,4,5,10,30,100,300,1000), trans="log1p", expand=c(0,0)) +
scale_y_continuous(breaks=c(0,125,250,375,500,625,750), expand=c(0,0)) +
theme_bw()

会给出这个结果:
enter image description here

关于r - 如何使用对数刻度和离散值改进 ggplot 直方图的方面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24646594/

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