首页 > 解决方案 > 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 的粉红色患者聚集在情节的顶部,我想知道这是否可能。我也愿意接受任何其他不同的提示或建议,你们都可能需要使这个情节更具可读性。

提前感谢您的任何提示或帮助!

标签: rggplot2

解决方案


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

在此处输入图像描述


推荐阅读