#r #ggplot2
#r #ggplot2
Вопрос:
Описание проблемы
Я пытаюсь создать график плавания в R, используя ggplot. Однако я сталкиваюсь с проблемой, когда я хотел бы иметь «пустое» пространство между двумя сложенными столбцами графика: столбцы расположены рядом друг с другом.
Код и примеры данных
У меня есть следующие примерные данные:
# 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 лечение (treatment 1), поэтому это отображается правильно.
Однако субъект 1 получил 3 лечения: лечение 1 с момента времени 0 до момента времени 3, затем ничего с 3 по 8, затем лечение 2 с 8 по 10 и т.д…
Данные нанесены таким образом, что у пациентов 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:
Я не думаю, что 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()
Создано 2019-03-29 пакетом reprex (версия 0.2.1)