r - R Ggplot2 Dot Plot - 是否可以根据不同变量的频率重新排序轴类别/值?
问题描述
我正在可视化每位患者的纵向数据,将每位患者的事件随时间绘制在点图上。我试图找出一种方法来使这个情节更具可读性。我正在考虑将具有特定事件的患者分组/聚集到点图上的特定位置(即事件 = 1 的患者将聚集到顶部)。
这是我到目前为止的 ggplot R 代码:
patient_plot <- ggplotly(
ggplot(cohort, aes(x = event_date, y = patient_id_factor, group = event, color = event)) +
geom_point(size = 1) + theme(axis.text=element_text(size=5)))
这产生了这个情节(https://i.stack.imgur.com/KEk3G.png)。我试图将事件 = 1 的粉红色患者聚集在情节的顶部,我想知道这是否可能。我也愿意接受任何其他不同的提示或建议,你们都可能需要使这个情节更具可读性。
提前感谢您的任何提示或帮助!
解决方案
forcats::fct_infreq
可以为您执行此操作:
您的情节的可重现示例:
library(ggplot2)
set.seed(42)
cohort <- data.frame(
event_date = as.Date("2021-01-01") + rpois(80, 200),
event = sample(5, 80, replace = TRUE, prob = 5:1),
patient_id_factor = as.character(sample(10, 80, replace = TRUE, prob = 1:10)))
ggplot(cohort, aes(x = event_date, y = patient_id_factor, group = event, color = event)) +
geom_point(size = 1) + theme(axis.text=element_text(size=5))
用于将forcats::fct_infreq
患者 ID 重新排序为频率顺序的一个因素,在顶部附近不频繁:
library(forcats)
cohort %>%
mutate(patient_id_factor = fct_infreq(patient_id_factor)) %>%
ggplot( aes(x = event_date, y = patient_id_factor, group = event, color = event)) +
geom_point(size = 1) + theme(axis.text=element_text(size=5))
推荐阅读
- javascript - 运行命令 npm start 时出现错误
- node.js - 在 Node + Express 中销毁同一用户的每个会话的正确方法?
- java - 使用@Value 注解注入单个属性
- html - Drupal 8 视图 - 内嵌显示的未格式化字段列表(与预期不同)
- python - 单击 Django 中的按钮时出现 TypeError 和 AssertionError
- google-apps-script - GoogleJsonResponseException:字段名称是必需的
- dynamic - 当工作簿在 Tableau 中打开时,如何使参数上的整数数据类型自动更新数字?
- c# - 我如何排除被 ConfuserEx 混淆的部分代码?
- php - 通过 HTTP API 将 PHP 数组转换为 NEO4J 查询的 JSON 格式
- mql4 - 如何在 mql4 中找到之前的最后一个移动平均交叉价格 x 蜡烛?