R - (ggplot) 使 geom_step 跳跃为虚线

2024-02-08

我正在绘制离散 CDF。我有一些关于 geom_step 的问题,但我没有通过使用 Google 找到这些问题。

  1. 是否可以将代表跳跃的线段做成虚线 而不是更扎实地更好地展示正在发生的事情?
  2. 是否可以比我更有效地添加 geom_point ? (较少的 c/p)。

以下是我当前的解决方案:

library(tidyverse)
library(ggthemes)
theme_set(theme_few())

x0 <- seq(-0.5, -0.01, by = 0.01)
x1 <- seq(0, 0.99, by = 0.02)
x2 <- seq(1, 1.99, by = 0.02)
x3 <- seq(2, 2.99, by = 0.02)
x35 <- seq(3, 3.49, by = 0.01)
x4 <- seq(3.5, 3.99, by = 0.01)

tibble_ex <- tibble(
  x0 = x0,
  x1 = x1,
  x2 = x2,
  x3 = x3,
  x35 = x35,
  x4 = x4
)

tibble_ex %>%
  gather(x, xax, x0:x4) %>%
  mutate(cdf = case_when(x == 'x0' ~ 0,
                         x == 'x1' ~ 1/2,
                         x == 'x2' ~ 3/5,
                         x == 'x3' ~ 4/5,
                         x == 'x35' ~ 9/10,
                         x == 'x4' ~ 1)) %>%
  ggplot(aes(x = xax, y = cdf)) +
  geom_step() +
  geom_point(aes(x = 0, y = 0), size = 3, shape = 21, fill = 'white') +
  geom_point(aes(x = 1, y = 0.5), size = 3, shape = 21, fill = 'white') +
  geom_point(aes(x = 2, y = 3/5), size = 3, shape = 21, fill = 'white') +
  geom_point(aes(x = 3, y = 4/5), size = 3, shape = 21, fill = 'white') +
  geom_point(aes(x = 3.5, y = 9/10), size = 3, shape = 21, fill = 'white') +
  geom_point(aes(x = 0, y = 0.5), size = 3, shape = 21, fill = 'black') +
  geom_point(aes(x = 1, y = 3/5), size = 3, shape = 21, fill = 'black') +
  geom_point(aes(x = 2, y = 4/5), size = 3, shape = 21, fill = 'black') +
  geom_point(aes(x = 3, y = 9/10), size = 3, shape = 21, fill = 'black') +
  geom_point(aes(x = 3.5, y = 1), size = 3, shape = 21, fill = 'black') +
  labs(x = 'x', y = 'F(x)')

如果您可以将数据放入数据框架中并对其进行结构化,以便可以直接映射数据的特征,那么 ggplot 的使用将会更加强大。

这是一种获取数据并通过将每个 x 与先前的 cdf 值匹配来用表示连接点的附加行来扩充数据的方法。我添加了一栏,type,以跟踪哪个是哪个。我也安排df以便geom_segment以正确的顺序绘制点。

new_steps <- 
  tibble(x = c(0:3, 3.5, 4),
         cdf = c(0, .5, .6, .8, .9, 1))


df <- new_steps %>%
  mutate(type = "cdf") %>%
  bind_rows(new_steps %>%
              mutate(type = "prior",
                     cdf = lag(cdf))) %>%
  drop_na() %>%
  arrange(x, desc(type))

然后我们可以绘制这些点'fill和 geom_segments 的线型为type.

ggplot(df) + 
  geom_point(aes(x, cdf, fill = type),
             shape = 21) +
  scale_fill_manual(values = c("black", "white")) +
  geom_segment(aes(x = lag(x), y = lag(cdf),
                   xend = x, yend = cdf,
                   lty = type)) +
  scale_linetype_manual(values = c("dashed", "solid"))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R - (ggplot) 使 geom_step 跳跃为虚线 的相关文章

  • 如何从 data.frame 中选择行和列的子集

    我有这个 d d Age gt 2 它返回 Age 超过 2 的所有行 但我只想返回几列中的值 例如 d X 和 d Y 而不是全部 无论如何我可以做到这一点吗 Thanks d d Age gt 2 c X Y
  • 在 Shiny 中使用 readlines(prompt = )

    我有一个代码 使用以下方式获取输入readlines prompt 功能 您能告诉我 Shiny 中的哪个输入函数足以将此代码适应 Shiny 应用程序吗 我需要一个交互功能 我无法使用简单的输入selectInput 因为我有很多read
  • Quarto/Rmarkdown 中的美人鱼图:狭窄且模糊

    我正在尝试生成 pdf 格式的四开文档 稍后会生成 word 格式 我遇到了美人鱼图的问题 请在下面找到一个示例 qmd 文件来说明该问题 所以首先它应该支持 mermaid 标签 但当我这样做时 我无法在 rstudio 中 运行 单元
  • R 中大型稀疏矩阵的聚类分析

    我有一个包含 250000 笔交易 行 和 2183 项 列 的交易数据集 我想将其转换为稀疏矩阵 然后对其进行分层聚类 我尝试了包 sparcl 但它似乎不适用于稀疏矩阵 关于如何解决这个问题有什么建议吗 或者我可以使用任何其他包对稀疏矩
  • udunits2 R 安装:找不到 udunits2.h

    我正在尝试在 R 中安装 udunits2 以满足对ggforce包裹 但是 安装程序在检查 udunits2 时始终失败 我已经尝试过中的说明this https stackoverflow com questions 47059517
  • 仅在具有重复块名称的另一个 Rmarkdown 文档中运行一个 Rmarkdown 文档中的代码

    我正在 Rmarkdown 中编写一系列相互补充的报告 我想将上一份报告的结果纳入我目前正在编写的报告中 我看到其他建议使用的问题purl从 Rmarkdown 文档中提取 R 代码然后运行它 所以我尝试了以下操作 r read previ
  • R 条形图中的 X 轴

    我想问一个关于 barplot 轴的问题 首先请看我的数据 SerNo DOY Rain 1 350 0 2 351 0 3 352 0 4 353 0 5 354 0 6 355 0 7 356 0 8 357 0 9 358 0 10
  • 如何在 R 地图库中绘制正确的颜色

    我正在尝试使用 R 地图库为特定国家绘制特定颜色 我可以填写颜色 但它们与各自的国家 地区没有正确关联 我想知道是否有人能知道为什么 我的数据框是 filld 有 3 列 第一列是国家名称 第二列只是一些数字数据 第三列是颜色 countr
  • 如何用日语创建 ggplot2 标题?

    我正在准备日语演示文稿 并希望图像的标题和图例名称为日语 我可以让文本在 RStudio 中渲染得很好 但是当渲染图像时 日语字符仅显示为方框 x 10 10 y x x df data frame x y ggplot df aes x
  • 使用 SparkR 1.5 从 RStudio 中的 hdfs 读取大文件(纯文本、xml、json、csv)的选项

    我是 Spark 新手 想知道除了下面的选项之外是否还有其他选项可以使用 SparkR 从 RStudio 读取存储在 hdfs 中的数据 或者我是否正确使用它们 数据可以是任何类型 纯文本 csv json xml 或任何包含关系表的数据
  • R 中带有边缘箱线图的直方图

    如何使直方图中的 X 轴与边缘箱线图匹配 data lt rnorm 1000 nf lt layout mat matrix c 1 2 2 1 byrow TRUE height c 1 3 layout show nf par mar
  • 如何使用r中的dplyr在特定位置插入空白行

    我想在数据框中的特定位置插入空白行 我的数据框是这样的 dat lt data frame group c rep A 1 rep B 4 rep C 2 rep D 2 group 1 A 2 B 3 B 4 B 5 B 6 C 7 C
  • 使用亚毫秒日期时间从字符->POSIXct->字符准确转换

    我的文件中有一个字符日期时间列 我加载文件 到data table 并执行需要将列转换为的操作POSIXct 然后我需要写POSIXct值返回文件 但日期时间不会相同 因为打印不正确 这个打印 格式问题是众所周知的 并且已经被讨论过多次 我
  • 无法在 Powershell 中运行 R.exe

    我经常发现在命令行 Windows 上运行 R 更有用 然而 当我在 Powershell 中尝试时 我往往会遇到问题 但这可以通过第一次运行轻松克服cmd然后就可以了 这是我执行此操作时遇到的错误R CMD BATCH Invoke Hi
  • for 循环与 cor.test 在许多类别上

    我正在尝试在 R 中编写一个循环 它将循环遍历 3 个不同的物种 以计算两个连续变量 Redness 和 VarNormAbund 之间的相关性 我的循环正在运行 但 3 个物种中每一个的输出都是相同的 这让我认为循环卡在第一个物种上 co
  • 在 R Shiny 中显示/隐藏整个框元素

    我目前正在尝试找到一种方法来隐藏 显示 R Shiny 中的整个 box 元素 以及里面的所有内容 我想创建一个可能的按钮 它允许用户展开特定框 然后使用相同 甚至不同 的按钮隐藏它 我不想使用条件面板 因为我的应用程序非常大并且会产生一些
  • 如何根据查找表匹配多列

    我有以下两个数据框 lookup lt data frame id c A B C price c 1 2 3 results lt data frame price 1 c 2 2 1 price 2 c 3 1 1 我现在想要浏览所有列
  • 在 ggplot 中过滤管道 df

    我正在使用 dplyr 管道来清理我的 df 然后直接输入到 ggplot 中 但是 我只想一次只绘制一组 因此我需要过滤到该组 问题是 我希望比例保持不变 就好像所有群体都存在一样 是否可以在 ggplot 命令中进一步过滤管道 df 例
  • 替换rmarkdown/knitr/pdf中字幕的自动编号

    我正在使用 Rmarkdown 生成 PDF 文档 我想在其中手动定义图号 下面是一个块的示例 r chunk26 fig cap Fig 5 3 My figure caption plot 1 1 我使用特殊的编号来遵循文档的章节 问题
  • R 在安装包依赖项时不考虑最大版本

    假设我正在开发一个名为magicr做一些统计魔术 我希望它使用另一个名为的包中的函数fairydust 假设 存在于 CRAN 上 很遗憾fairydust刚刚向 CRAN 发布了 2 0 0 版本 完全破坏了我计划使用的功能 所以我更新了

随机推荐