Наличие geom_vline () хорошо ладит с facet_grid (): неудачный пример отображения - PullRequest
1 голос
/ 02 апреля 2019

Используя данные, сгенерированные из здесь , я бы хотел, чтобы ggplot2 создал график, аналогичный приведенному ниже.

Желательные панели графиков с нежелательной маркировкой (facet_wrap):

Desirable plot panels with undesirable labeling (facet_wrap)

Цель этого графика - сделать возможным визуальное сравнение среднего значения распределения в первом столбце (подход 1) со средним значением плотности в каждом столбце.,Сценарий создания графиков плотности выглядит следующим образом:

ggplot(surg_df, aes(x=op_tm, col=color_hex)) +
  geom_density(aes(fill=color_hex), alpha=0.3) +
  geom_density(data = base_comp_df, col='#a269ff', alpha=1, size=0.5) +
  geom_vline(data=avg_surg_df, aes(xintercept= avg_op_tm), 
             size=1, col=avg_surg_df$color_hex, linetype="dashed") +
  geom_vline(data=avg_comp_df, aes(xintercept= avg_op_tm+2), 
             size=1, colour='#a269ff', linetype="dashed") +
  annotate(geom= "text",
           label=paste("mean diff: ", 
                       as.character(floor(avg_comp_df$avg_op_tm-avg_surg_df$avg_op_tm)), 
                       sep=""), 
           col='black', size=4, x=100, y=0.006) +
  geom_segment(aes(x = avg_op_tm, y=0.006, xend = avg_surg_df$avg_op_tm, 
                   yend = 0.006, colour = "red") , 
               size=1, data = avg_comp_df) +    
  facet_wrap(~surg_grp) +
  theme(axis.text.x = element_text(angle = 90, hjust = 1)) +
  scale_colour_identity(guide="none", breaks=base_surg_df$color_hex) +
  scale_fill_identity(guide="legend", breaks=base_surg_df$color_hex,
                      name="Surgical Approaches", 
                      labels=base_surg_df$surg_apprch) 

Желательно, чтобы вышеуказанный график был создан с использованием facet_wrap() с группированием по переменной surg_grp.Но когда я решил придать ему менее грязный вид с преимуществом маркировки вместо facet_grid(), все вышло из-под контроля.К настоящему моменту мне удалось создать facet_grid() следующую паршивую коллекцию графиков плотности, каждая из которых имеет 3 нелепые вертикальные линии для каждой панели :)) Линии оказываются средними значениями по каждому столбцу, выбранному из переменной avg_op_tm из avg_surg_df расчетная таблица сводок.

Нежелательные графические панели, желаемая маркировка (facet_grid):

Undesirable plot panels, desirable labeling (facet_grid)

AsВы заметили, что в приведенном ниже сценарии, в отличие от предыдущего графика, есть только один geom_vline, и три строки на каждой панели взяты из этой единственной строки:

ggplot(surg_df)+
  geom_density(aes(x=op_tm, col=color_hex, fill=color_hex), alpha=0.3) +
  scale_fill_identity("Approaches", guide="legend", breaks=base_surg_df$color_hex, 
                      labels=base_surg_df$surg_apprch,
                      aesthetics = "fill")+    
  scale_colour_identity(guide="none",breaks=base_surg_df$color_hex)+
  geom_density(data = base_comp_df, aes(x=op_tm), alpha=1, col='#a269ff', size=0.5) +
  geom_vline(data=avg_surg_df, aes(xintercept= avg_op_tm), size=1,
             linetype="dashed")+
  annotate(geom= "text",
           label=paste("mean diff: ", 
                       as.character(floor(avg_surg_df$avg_op_tm)), sep=""), 
           col='black', size=4, x=100, y=0.006)+
  facet_grid(rows = vars(condition_grp), cols=vars(surg_apprch), scales = 'free')

Сообщество с подобными вопросами и ответами около facet_wrap() + geom_vline()но не так много полезных вопросов и ответов о facet_grid() + geom_vline().Как можно geom_vline() использовать два параметра группировки, которые были переданы в facet_wrap (condition_grp и surg_apprch), и заставить его правильно отображать данные?Какую образовательную точку мне не удалось понять, из-за чего мой подход с facet_grid() не удался?

Любая помощь высоко ценится.

...