R中的游标图,堆叠的条之间有“空”空间(ggplot)

时间:2019-03-29 16:59:04

标签: r ggplot2

问题描述

我正在尝试使用ggplot在R中创建一个游泳图。但是,当我想在情节的两个堆叠条形图之间留出“空”空间时,我遇到了一个问题:这些条形图彼此相邻排列。

代码和示例数据

我有以下示例数据:

# Sample data
df <- read.table(text="patient start keytreat duration
                 sub-1    0   treat1  3
                 sub-1    8   treat2  2
                 sub-1    13  treat3  1.5
                 sub-2    0   treat1  4.5
                 sub-3    0   treat1  4
                 sub-3    4   treat2  8
                 sub-3    13.5  treat3  2", header=TRUE)

当我使用以下代码生成游泳图时,最终得到了3个主题的游泳图。受试者2仅接受了1次治疗(治疗1),因此此显示正确。

但是,对象1接受了3种治疗:从时间点0到时间点3的治疗1,然后从3到8不进行任何治疗,然后从8到10进行治疗2,等等...

以某种方式绘制数据,在1号和3号患者中,所有治疗都是连续的,而不是在它们之间有“空”间隔。

# Plot: bars
bars <- map(unique(df$patient)
            , ~geom_bar(stat = "identity", position = "stack", width = 0.6,
                        , data = df %>% filter(patient == .x)))



# Create plot
ggplot(data = df, aes(x = patient,
                      y = duration,
                      fill = reorder(keytreat,-start))) + 
  bars +
  guides(fill=guide_legend("ordering")) + 
  coord_flip() 

问题

在该游泳图中如何在两个非连续治疗之间包含空白?

1 个答案:

答案 0 :(得分:1)

在这种情况下,我认为geom_bar不是正确的选择。这确实是为了显示频率或计数,您无法显式控制其开始或结束坐标。

geom_segment可能就是您想要的:

library(tidyverse)

# Sample data
df <- read.table(text="patient start keytreat duration
                 sub-1    0   treat1  3
                 sub-1    8   treat2  2
                 sub-1    13  treat3  1.5
                 sub-2    0   treat1  4.5
                 sub-3    0   treat1  4
                 sub-3    4   treat2  8
                 sub-3    13.5  treat3  2", header=TRUE)

# Add end of treatment
df_wrangled <- df %>%
  mutate(end = start + duration)

ggplot(df_wrangled) +
  geom_segment(
    aes(x = patient, xend = patient, y = start, yend = end, color = keytreat),
    size = 8
  ) +
  coord_flip()

reprex package(v0.2.1)于2019-03-29创建