扩展ggplot中定性变量的限制

2024-03-22

大家好,感谢您的考虑,

目标是在有很多 x 轴标签的情况下提供更多空间。请注意,我不关心标签本身是否在绘图上可视化(我已在下面的代码中排除了它们)。我想要改变的是,当典型的 geom_point 图中有大约 1000 个 x 轴标签和 1000 个数据点时,与第一个和最后几个 x 轴标签相关的最左边和最右边的点会被压碎绘图区域的边缘。我想填充一些空间,这样这些点就不会被挤压。

我想知道是否有办法改变scale-x-discrete(limits=c(xi,xii))在这种情况下的命令类型xi and xii不是数字,而是字符串。两个例子可以让这一点(希望)清楚:

在第一种情况下,最右边的点和灰色阴影图的边缘之间的间距很大,这样该点就不会直接超出绘图区域的边缘。我想要这种效果,即最后一个点和绘图边缘之间有一些空间。

library(ggplot2)
set.seed(10)
lessVals = sample(1:100000, 10, replace = T)
lessIDs = as.character(sample(1:100000, 10, replace = T))
df.less <- data.frame(lessIDs, lessVals)
df.less$lessIDs <- as.character(df.less$lessIDs)
lessDat <- ggplot(df.less)
lessDat + geom_point(aes(lessIDs, lessVals)) + theme(axis.text.x = 
element_blank())

然而,在以下情况下,有数千个 x 轴点,虽然可视化身份本身的标签无关紧要,但我想避免将最左边和最右边的点挤压到绘图区域的边缘。请注意,我不关心图中的点被挤压在一起 - 这是不可避免的,并且过度绘制可以通过 alpha 参数或其他东西来解决。我想要修复的是让绘图边缘上的点(最好是左侧和右侧)在水平面之间有一些缓冲区,其中左侧是 y 轴刻度,右侧是当前的刻度什么都没有(但可能是一个传奇)。

manyIDs = as.character(sample(1:100000, 1000, replace = T))
manyVals = sample(1:100000, 1000, replace = T)
df.many <- data.frame(manyIDs, manyVals)
df.many$manyIDs <- as.character(df.many$manyIDs)
manyDat <- ggplot(df.many)
manyDat + geom_point(aes(manyIDs, manyVals)) + theme(axis.text.x = 
element_blank())

我很想知道到底可以做什么来为这些点的水平边缘提供一些缓冲。

感谢您分享您的天才。


因为您的 x 变量是字符,所以 ggplot2 创建一个“离散”x 轴。当类别数量相当小时 (2 - 25) 时,离散轴的默认绘图限制非常有意义。您可以使用expand论证scale_x_discrete手动调整绘图限制。视觉外观将取决于点的大小和图形设备,因此您可能需要进行相应的调整。

例如,scale_x_discrete(expand=c(0.1, 0))会将图的每一边扩展数据范围的 10%。尽管scale_x_discrete(expand=c(0, 2))将每边扩大 2(无论 x 的单位是什么)。另请参阅http://ggplot2.tidyverse.org/reference/scale_discrete.html http://ggplot2.tidyverse.org/reference/scale_discrete.html

p1 <- ggplot(df.less, aes(x=lessIDs, y=lessVals)) +
      geom_point() + 
      theme(axis.text.x=element_blank()) +
      labs(title="Default x-axis limits")

# Added x-axis space with expand.
p2 <- ggplot(df.less, aes(x=lessIDs, y=lessVals)) +
      geom_point() + 
      theme(axis.text.x=element_blank()) +
      scale_x_discrete(expand=c(0, 2)) +
      labs(title="expand=c(0, 2)")

p3 <- ggplot(df.many, aes(x=manyIDs, y=manyVals)) +
      geom_point() + 
      theme(axis.text.x=element_blank()) +
      theme(panel.grid.major.x=element_blank()) +
      theme(axis.ticks.x=element_blank()) +
      labs(title="Default x-axis limits")

# Added x-axis space with expand.
p4 <- ggplot(df.many, aes(x=manyIDs, y=manyVals)) +
      geom_point() + 
      theme(axis.text.x=element_blank()) +
      theme(panel.grid.major.x=element_blank()) +
      theme(axis.ticks.x=element_blank()) +
      scale_x_discrete(expand=c(0.1, 0)) +
      labs(title="expand=c(0.1, 0)")

library(gridExtra)

ggsave("plots.png", plot=arrangeGrob(p1, p2, p3, p4, nrow=2), 
       height=4, width=6, dpi=150)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

扩展ggplot中定性变量的限制 的相关文章

  • R:使用带有 .Call 和 C/C++ 包装器的 Fortran 子例程而不是 .Fortran 的优点?

    我有一个 R 包 它使用大量 Fortran 子例程来进行递归线性代数计算的嵌套循环 很大程度上依赖于 BLAS 和 LAPACK 例程 作为 Fortran 的接口 我使用 Fortran功能 我刚刚读过乔纳森卡拉汉的博客文章 http
  • grid.arrange 中的错误 -rangeGrob() 函数

    我有两个图 p1 和 p2 我试图使用 grid arrage 绘制它们 我的代码如下所示 grid arrange p1 p2 ncol 2 top textGrob Distribution across each day of the
  • 在嵌套 tibbles 上应用 ntile

    我正在尝试申请ntile在一些嵌套的小标题上 但我似乎无法让它工作 你能看出我错在哪里吗 data iris iris gt group by Species gt mutate quintile ntile Petal Length 5
  • 根据不平凡的标准有效合并两个数据帧

    正在接听这个问题 https stackoverflow com questions 18821862 data selection error 18823432 18823432昨晚 我花了一个小时试图找到一个没有增长的解决方案data
  • read.table 和 read.delim 函数之间的区别

    两者有什么区别read table and read delim R语言中的函数 当您不确定函数的作用时 除了阅读帮助页面之外 您还可以检查函数的实际代码 例如 输入read delim显示该函数包含以下代码 gt read delim f
  • 确定向量中是否存在元素的最有效方法

    我有几种算法取决于确定元素是否存在于向量中的效率 在我看来 这 in 这相当于is element 应该是最有效的 因为它只返回一个布尔值 在测试了几种方法之后 令我惊讶的是 这些方法是迄今为止效率最低的 以下是我的分析 随着向量大小的增加
  • R 中的转换会导致文档错误

    每当我运行此代码时 tm map 行都会给我警告消息 警告信息 在 tm map SimpleCorpus docs toSpace 中 转换删除文档 texts lt read csv Data fast food Domino s Do
  • 分组和计数以获得接近值

    我想计算每country的次数status is open以及次数status is closed 然后计算closerate per country Data customer lt c 1 2 3 4 5 6 7 8 9 country
  • 抑制 R 中的错​​误消息

    我正在 R 中运行模拟研究 有时 我的模拟研究会产生错误消息 当我在函数中实现模拟研究时 当出现此错误消息时模拟停止 我知道抑制错误是不好的做法 但此时对我来说 除了抑制错误然后继续下一个模拟 直到达到我喜欢运行的模拟总数为止 没有其他选择
  • R lubridate:当地语言的工作日

    如何获取本地语言的工作日和月份 My code library lubridate data lt c 10 02 2015 11 03 2015 data lubri lt dmy data wday data lubri label T
  • 将 read.csv 与符号链接文件一起使用

    我正在尝试做什么 我的源文件非常大 我想避免将其复制到其他文件夹中 我决定创建一个指向大文件的符号链接并想使用read csv读取文件 文件夹结构 项目1 数据 源文件 csv 项目2 数据 别名到源文件 csv 什么地方出了错 读取源文件
  • 使用starts_with() 将 NA 替换为 0

    我正在尝试替换我的一组特定列的 NA 值tibble 这些列都以相同的前缀开头 所以我想知道是否有一种简洁的方法来使用starts with 函数从dplyr包可以让我做到这一点 我已经看到了有关 SO 的其他几个问题 但是它们都需要使用特
  • 在 mutate 和 across 之后使用 ~separate

    目的是将所有物种 setosa 行转换为一行 setosa 这是一个最小的示例 实际上有更多列和更多组 我有这个数据框 head iris 2 gt select 1 2 5 gt group by Species Sepal Length
  • 使用管道语法处理模型列表

    我经常喜欢拟合和检查与 R 数据框中的两个变量相关的多个模型 我可以使用如下语法来做到这一点 require tidyverse require broom models lt list hp exp cyl hp cyl map df m
  • R:编写抛硬币的随机采样程序

    假设我们有以下情况 有一枚硬币 如果它正面朝上 那么下一次抛掷正面的概率是 0 6 如果是反面 那么下一次抛掷反面的概率也是 0 6 一个班有100名学生 每个学生随机抛掷硬币几次 Student n 的最后一次抛硬币不会影响 Studen
  • 如何从R中的日期中提取月份

    我正在使用lubridate封装并应用month从日期中提取月份的函数 我在日期字段上运行了 str 命令 得到了 Factor w 9498 levels 01 01 1979 01 01 1980 5305 1 1 1 1 1 1 1
  • 回归时如何设置系数值;右

    我正在寻找一种指定预测变量值的方法 当我使用当前数据运行 glm 时 其中一个变量的系数接近 1 我想将其设置为 0 8 我知道这会给我一个较低的 R 2 值 但我先验地知道模型的预测能力会更大 glm 的权重组件看起来很有希望 但我还没有
  • 聚合日期时间以总结在特定条件下花费的时间

    我很困惑我应该如何继续 我下面有一些虚拟数据 Date lt as POSIXct c 2018 03 20 11 52 25 2018 03 22 12 01 44 2018 03 20 12 05 25 2018 03 20 12 10
  • R闪亮主面板显示样式和字体

    我正在学习闪亮的应用程序 并且有一些关于调整布局的基本问题 特别是样式和字体 希望得到指点或明确的答案 谢谢 考虑一个基本的输入输出应用程序 用户在 sidebarPanel 中输入数据 然后在 mainPanel 中反应性地输出结果 如何
  • 如何使用 R 中的函数 sqlSave() 将数据附加到具有 IDENTITY 主键的 SQL Server 表?

    我在SQL Server中创建了一个表 如下所示 CREATE TABLE testPK ID INT NOT NULL IDENTITY 1 1 PRIMARY KEY NumVal NUMERIC 18 4 现在我想使用 RODBC 函

随机推荐