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 跳跃为虚线 的相关文章

  • 显示特定颜色

    我正在研究颜色分类 我正在用特定颜色初始化一个矩阵 以便可以获得红色 蓝色或绿色的 16x16 矩阵 代码如下 library rgl color1 lt function n lt 3 m lt 16 a lt list numeric
  • 以给定的纵横比保存绘图

    我正在使用非常棒的库 ggplot2 我想出了如何使用设置绘图的纵横比coord fixed 现在 我想将绘图保存为具有指定宽度 例如 10 厘米 的 PDF 并计算所需的高度 我不知道如何实现这一目标 这可能吗 您可以使用网格函数来计算
  • 什么时候在“strsplit”中设置“perl=TRUE”不起作用(按预期或根本不起作用)?

    我只是在尝试优化一些代码时做了一些基准测试并观察到strsplit with perl TRUE is faster比跑步strsplit with perl FALSE 例如 set seed 1 ff lt function paste
  • 为什么 statsmodels 和 R 的逻辑回归结果不同?

    我正在尝试比较 python 的 statsmodels 和 R 中的逻辑回归实现 Python版本 import statsmodels api as sm import pandas as pd import pylab as pl i
  • R闪亮数据表在开始时不显示记录(行)

    我正在构建一个带有数据表的闪亮应用程序 我想要的是启动时不显示任何记录 行 这样您只能看到表格顶部的过滤器 当您开始输入时 会显示行 我在数据表中找不到选项 这可能吗 下面是示例代码 shinyApp ui navbarPage title
  • cspade() R 错误

    我正在尝试从电缆调制解调器的事件中挖掘规则 链接的是数千个文件 当我尝试在所有设备的合并文件 1200 万行 上运行 cspade 算法时 它会花费数小时来消耗 RAM 直到它用完我可用的所有 64 GB 因此 我尝试仅在一台设备的链接文件
  • 长变量名在 dplyr 中失败

    长度超过 39 个字符的字符串在 dplyr 中失败 返回错误 错误 索引超出范围 我错过了什么还是这是一个错误 40 个字符不起作用 library dplyr names iris 5 lt vvv 5vvv10vvv15vvv20vv
  • 查找嵌套列表中元素的索引?

    我有一个类似的列表 mylist lt list a 1 b list A 1 B 2 c list C 1 D 3 是否有一种 无循环 方法来识别元素的位置 例如如果我想用 5 替换 C 的值 并且在哪里找到元素 C 并不重要 我可以这样
  • 在 R 中进行 Cox 回归后,将预测危险比列添加到数据帧中

    在 R 中运行 Cox PH 回归后 我需要在数据框中添加预测风险比的列 数据框是面板数据 其中 numgvkey 如果公司标识符 和年龄是时间标识符 您可以从此链接下载一小部分日期 https drive google com file
  • 如何调整ggplot直方图的时间刻度轴

    我正在使用一个数据框 其中一列包含POSIXct日期时间值 我正在尝试使用绘制这些时间戳的直方图ggplot2但我有两个问题 我不知道如何设置 binwidthgeom histogram 我想将每个垃圾箱设置为一天或一周 我尝试提供 di
  • 将summary()写入as.data.frame以在ggplot / R中使用

    请查找 af 数据样本t below 我正在使用以下方法进行竞争风险分析etmCIF来自etm package 产生以下结果 这很好 但需要更好的图形 曾经有一个ggtrans etm函数将数据导入ggplot 然而 这个功能显然被删除了
  • R 中的 NA 替换函数

    我正在尝试替换矩阵中的 NA mat 零 我在用着mat is na mat lt 0 当我有 18946 个变量的 94531 个观察值或更小的矩阵时 效果很好 但我在 22752 个变量的 112039 个观察值的矩阵上尝试它 R 显示
  • 使用底格里斯河从纬度/经度获取人口普查区

    我有相对较多的坐标 我想获取其人口普查区 除了 FIPS 代码 我知道我可以使用以下命令查找各个纬度 经度对call geolocator latlon 已完成here https stackoverflow com questions 5
  • R-了解 akima::interp 结果中的 NA 值

    我有以下数据框 ref dat k Intensity Slope 1 0 021467214 33 16 2 0 012444759 33 8 3 0 006079156 33 4 4 0 003792025 33 2 5 0 02276
  • ggplot 中的错误问题:“grid.Call(”L_textBounds“, as.graphicsAnnot(x$label), x$x, x$y, … 中的错误”[重复]

    这个问题在这里已经有答案了 我试图在 ggplot 中制作一个条形图 其中我通过强制其中一些标签为长度为零的字符串 即 来指定要显示的标签 但是 我收到错误 Error in grid Call L textBounds as graphi
  • R:将 readRDS 应用于 .Rds 文件名的列表对象

    我有几个包含数据帧对象的 Rds 文件 我想对每个文件应用一个函数并将数据帧绑定到单个数据帧中 但是 当我尝试从文件名列表中读取多个 Rds 文件时 我收到错误 FUN X i 中的错误 从连接读取时出错 readRDS 不适用于列表吗 R
  • 错误:“rjags”的包或命名空间加载失败

    在终端的 conda 环境之一中 我能够成功安装包 rjags 但是 当我在该环境中运行 R 并运行库 rjags 时 出现以下错误 加载所需的包 coda 错误 rjags 的包或命名空间加载失败 rjags 的 loadNamespac
  • R.matlab/readMat:readTag(this) 中出错

    我正在尝试使用 R matlab 将 matlab 文件读入 R 但遇到此错误 require R matlab r lt readMat file mat verbose T Trying to read MAT v5 file stre
  • R 编程:如何计算数据框中两个单元格之间的差异并将它们保存在新列中

    尝试学习 R 并陷入自相关示例中 我想将 x 的差异与 y 的差异进行回归 我在数据框中有 x 和 y 并且希望将 x2 x1 的差值保存在新列 例如 dx 中 我不知道该怎么做 我拥有的 data1 x y 5 3 8 9 3 1 1 5
  • 如何更改 Shiny 中 navbarPage 折叠的断点

    我想用shiny navbarPage collapsible TRUE 当在小屏幕上查看我的 Shiny 应用程序时 将导航元素折叠到菜单中 默认情况下 当浏览器宽度小于 940 像素时会触发折叠 有什么方法可以改变这一点 以便在稍大的浏

随机推荐