在ggplot2中生成水平缺口图

Generating horizontal notch plot in ggplot2

我有一个数据,其中包含 3 种不同的疾病状况及其几种结果。疾病在第一列,结果从第二列开始命名。请看附件中的数据。

Disease A   B   C   D   E   F   G   H
X   0.001527882 0.003459413 0.000648574 0.002127627 0.000847073 0.002628663 0.00000156  0.001697012
X   0.001848781 0.003641997 0.000876108 0.0024079   0.001061678 0.00253612  0.00000191  0.001761288
X   0.004304498 0.005887634 0.003197471 0.003581047 0.002125073 0.003125686 0.000025    0.001974246
X   0.006675181 0.00784345  0.004085157 0.005653283 0.003118116 0.001897106 0.000011    0.004055166
X   0.006206229 0.007407223 0.003775627 0.005398474 0.002903612 0.001901196 0.0000138   0.003867669
X   0.008291067 0.010172375 0.005316099 0.007294589 0.003807516 0.002711993 0.00000431  0.004335257
X   0.00405819  0.006540146 0.002686623 0.004762546 0.00163977  0.003309515 0.00000789  0.001957311
X   0.0067902   0.010219971 0.004727677 0.0070145   0.002995965 0.005784826 0   0.003331767
X   0.005495986 0.008415487 0.003807673 0.00552374  0.002361458 0.005504102 0.000000805 0.002746723
X   0.005209265 0.008041805 0.003572746 0.005247395 0.002243573 0.005357235 0.0000016   0.002665558
X   0.007467104 0.010856364 0.004896178 0.008258422 0.003086705 0.00341522  0.00000285  0.002702047
Y   0.007670113 0.00940323  0.006406508 0.007372615 0.003627189 0.001986754 0.0000465   0.002585564
Y   0.004686043 0.00726605  0.003055345 0.005017251 0.002003367 0.003900496 0.000000476 0.002309116
Y   0.004177442 0.006972389 0.002680084 0.00474762  0.001885973 0.004097005 0.000000662 0.002295276
Y   0.004475911 0.006846188 0.003625686 0.004221453 0.002829967 0.002831975 0.00000357  0.001636054
Y   0.005848798 0.008090652 0.00340937  0.006071063 0.003104326 0.003234079 0.000000615 0.003722661
Y   0.006518662 0.009792935 0.004230156 0.007402922 0.002677034 0.002810624 0.000000494 0.002678868
Y   0.005428432 0.008254325 0.003481542 0.006025152 0.002306644 0.002731699 0.0000341   0.002559538
Y   0.006138387 0.007997736 0.003884782 0.005445355 0.003097547 0.003177233 0.0000197   0.003667534
Y   0.005268127 0.006967856 0.003245438 0.004784031 0.002785673 0.003147425 0.0000161   0.003360895
Y   0.006824798 0.008643139 0.00441859  0.006040691 0.003519989 0.003252144 0.0000123   0.003866648
Y   0.006756669 0.008882524 0.004407434 0.006087051 0.003316964 0.0038456   0.00000907  0.003794542
Y   0.006766808 0.008916508 0.004425926 0.006133224 0.003349647 0.00381514  0.0000122   0.003794175
Y   0.005288403 0.006397465 0.003993784 0.004615067 0.002988219 0.00219577  0.000224752 0.002179541
Y   0.007064576 0.010323695 0.00479257  0.007002344 0.003084699 0.005404821 0.00000601  0.003126432
Y   0.004992499 0.007830614 0.003199636 0.005100254 0.002196152 0.004706792 0.0000291   0.002574521
Y   0.007285894 0.009257734 0.004756352 0.006956334 0.003740338 0.002541691 0.0000017   0.003785755
Y   0.007284548 0.009060781 0.004695172 0.006907381 0.003923092 0.00237505  0.00000764  0.004050348
Y   0.00502541  0.006910243 0.00368707  0.004952021 0.003261628 0.002949114 0.000131343 0.002590292
Y   0.005605946 0.008788954 0.003741203 0.006023171 0.002442795 0.004465909 0.000000421 0.002661231
Y   0.003618486 0.006465109 0.002340945 0.004184876 0.001724263 0.003914174 0.00000106  0.002229038
Y   0.004858636 0.008062734 0.00315832  0.005736985 0.002185119 0.003723115 0.00000306  0.002509759
Z   0.005107876 0.008322495 0.003352967 0.005921168 0.002309924 0.003758071 0.00000206  0.002624568
Z   0.003509392 0.005521583 0.002485114 0.003173729 0.00126778  0.00355057  0.0000431   0.001887588
Z   0.003865434 0.005767412 0.002810001 0.003372551 0.001460574 0.003648029 0.0000457   0.001909999
Z   0.005177201 0.007826825 0.003958008 0.004716213 0.002546243 0.00398816  0.00000473  0.00242293
Z   0.006601694 0.009499528 0.004681797 0.00669723  0.003016417 0.004643877 0.00000777  0.003081804

然后,我用下面的方法做了一个图,你可以在附件中看到(Figure1)。

library(reshape2)
library(ggplot)
DvsO = read.table("Disease_vs_Outcome.txt", header = TRUE)
DvsO  <- data.frame(DvsO)
DvsO <- melt(DvsO, id.vars="Disease")


ggplot(DvsO, aes(Disease, value, fill=Disease)) + 
  geom_violin() + geom_boxplot(width=.5) + facet_wrap(~variable,scales="free") +  scale_fill_manual(values=c("#CC6666", "#00CC00","#3399FF"))

但是,我想生成一个像这样的图 (Figure2)。基本上,我想将图形翻转成水平并将所有数据放在一个面板中。

如果你能帮我解决这个问题,我会很高兴吗?非常感谢您。

您可以使用 coord_flip 翻转方框(但不能使用自由秤)。我建议保留刻面,但改用 facet_grid。制作一个面板要困难得多。如果需要,您可以调整刻面的外观。

(您可能可以取消此图中的 y 轴。)

ggplot(DvsO, aes(Disease, value, fill=Disease)) + 
  geom_violin() + 
  geom_boxplot(width=.5) + 
  facet_grid(variable~.) +
  scale_fill_manual(values=c("#CC6666", "#00CC00","#3399FF")) +
  coord_flip() + 
  theme_bw() +
  theme(panel.margin = unit(0, "lines"))

编辑:

还有积分(你也可以看看geom_dotplot):

ggplot(DvsO, aes(Disease, value, fill = Disease)) + 
  geom_violin(color = NA, alpha = 0.8) + 
  geom_point(position = position_jitter(w = 0.5, h = 0), alpha = 0.7) +
  facet_grid(variable~.) +
  scale_fill_manual(values=c("#CC6666", "#00CC00","#3399FF")) +
  coord_flip() + 
  theme_bw() +
  theme(panel.margin = unit(0, "lines"), 
        axis.text.y = element_blank(),
        axis.ticks.y = element_blank(),
        axis.title.y = element_blank())