如何使用对数刻度和离散值改进 ggplot 直方图的外观

2024-01-16

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

请考虑以下 MWE

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

产生

进而

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

这可能更糟

因为现在它给人的印象是“1”和“2”之间缺少某些东西,并且也不完全清楚哪个条具有值“1”(条位于right刻度线)以及哪个柱的值为“2”(柱位于left蜱)。

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

有可能改进一些东西吗?

EDIT:

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

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()

gives: 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()

will give this result: enter image description here

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用对数刻度和离散值改进 ggplot 直方图的外观 的相关文章

  • 如何计算由离散数据定义的表面下的体积?

    我需要确定由离散数据点表示的一系列表面下方的体积 在我的数据中 每个样本都作为数据帧列表中的单独数据帧存储 这是一些 小 示例数据 df1 lt data frame x c 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 y
  • data.table:j中的匿名函数

    我试图让匿名函数返回多列j的论证data table 这是一个例子 sample data tmpdt lt data table a c rep a 5 rep b 5 b c rep f 3 rep r 7 c 1 10 d 21 30
  • R 中计算滚动实现波动率的更快方法

    我想计算一组指数的滚动 20 天已实现波动率 这是我用来下载指数价格 计算每日收益和 20 天已实现波动率的代码 library quantmod library PerformanceAnalytics tickers c RUT STO
  • 使用 R 中的晶格为 xyplot 中的每个面板添加不同的垂直线

    我有一个按年份排列的几个站点的植物物种频率图 我正在使用 grid 包中的 xyplot 绘制这些站点 我已经弄清楚如何获取每个物种位点组合的散点图 但是 我想添加一个 abline 代表进行化学处理的每年 每个地点在不同年份添加了化学处理
  • 如何与 R 包 sf 进行“完整”联合

    我尝试使用三个多边形之间的并集sf st union 下图中显示了 ArcGIS Overlay Union All 的结果 我希望通过使用 R 中的 sf 包获得与 OUTPUT 中五个不同多边形类似的结果 library sf a1 l
  • Caret 和 GBM:任务 1 失败 - “参数意味着行数不同”

    我正在尝试使用以下代码运行带插入符号的 GBM library caret library doParallel detectCores registerDoParallel detectCores 1 set seed 668 in tr
  • R 中的约束优化

    我正在尝试使用http rss acs unt edu Rdoc library stats html constrOptim html http rss acs unt edu Rdoc library stats html constr
  • 导入 mgcv 失败,因为找不到 Rlapack.dll

    我想通过使用链接到 IronPython 中的 R 统计包R NET http rdotnet codeplex com 图书馆 它一直工作得很好 但现在我需要使用 R 的mgcv http cran r project org web p
  • 如何使用Shiny中的下载按钮?

    我想下载一个csv使用 Shiny 中的下载按钮下载文件 该文件将使用辅助 r 脚本中的参数创建 SERVER output downloadData lt downloadHandler filename function paste d
  • 条件 RenderUI R 闪亮

    我的 renderUI 有问题 但在任何地方都找不到解决方案 可能我向谷歌问了错误的问题 不仅仅是一个闪亮的问题 而是一个基本的 R 问题 我在 R 中有一个函数 根据输入将返回一个表格或文本 所以我在我的 server R 中以这种方式创
  • 使用 data.table 而不是 data.frame 进行子集化

    我正在处理一个包含 300 万行和 10 列的数据框 并且正在对其进行一些子集化 我下面有一些玩具代码 当我子集化时 需要很长时间 如果我使用 data table 和 data table 上的子集会更快吗 这是一些玩具代码 s lt c
  • 如何在小插图中的同一 R 包中放置指向另一个小插图的链接

    我有一个关于 Bioconductor 的包 我正在向它添加第二个小插图 我想将第二个小插图链接到第一个小插图 因为一个小插图位于包的一般工作流程上 第二个小插图用于针对更高级的用户的精细参数调整 有没有一种干净的方法来做到这一点 我发现的
  • R:重新列出平面列表

    这个问题 https stackoverflow com questions 8139677有一个很好的解决方案 可以在保留列表数据类型的同时展平列表 其中unlist才不是 flatten function x unlist vector
  • 添加不同 data.frame 中缺失的列并填充 0 [重复]

    这个问题在这里已经有答案了 我有以下情况 df1 a b c d 1 2 3 4 df2 a c 5 6 我想要的结果是 用 df1 中缺失的列填充第二个 data frame 并用零填充它们 所以结果应该是 df3 a b c d 5 0
  • 查找表中第三个四分位数以上的频率

    我有一个大数据框架 对 57 个变量的超过 239k 观察值 其中包含一些疾病描述以及针对不同年龄段的人针对这些疾病使用的药物 我想在每种疾病描述的使用频率前四分之一中找到这些药物 为了制作一个可重现的示例 我创建了一个包含 1000 个观
  • 加载 plyr 包时出现问题

    我使用 R 2 13 1 但未能成功尝试在 R 中加载包 plyr 1 6 我已将其手动安装到目录 R library 中 我的代码是 libPaths R library library plyr 我收到消息 库 plyr 中的错误 pl
  • 将一个数据框中的行(带有行名称)与另一个数据框中的匹配列名称相乘

    我有两个数据框 df1 lt data frame Values c 0 01 0 05 row names c X Y df1 Values X 0 01 Y 0 05 df2 lt data frame c 0 1 1 c 1 0 0
  • 使用“kde”函数进行 R 中的 5-D 核密度估计

    我想通过使用 R 的 ks 库中的 kde 函数来执行 5 维数据 x y z 时间 大小 的核密度估计 在它的手册中 它说它可以执行核密度估计1 至 6 维数据 手册第 24 页 http cran r project org web p
  • selectInput 的动态数量

    我是闪亮的新手 所以这可能是一个非常基本的问题 我想编写一个闪亮的应用程序 其中用户输入 n 我们得到 n 个 selectInput 选项 但我无法做到这一点 基本上任何形式的 for 循环都不起作用 我尝试的代码如下 library s
  • R Markdown 文档标题中的希腊字母

    R markdown 文档的标题中是否可以包含希腊字母 我试过这个 title Amylase author author date 8 March 2017 output pdf document keep tex true toc ye

随机推荐