Сюжет для скрипки в R с дискретными значениями

Я пытаюсь создать график скрипки в R из данных подсчета. Данные, которые я использую, — это количество мутаций, обнаруженных в каждом образце для каждого источника.

Это выглядит примерно так:

2 Source1
8 Source2
0 Source1
1 Source1
9 Source2
...

Я уже использовал приведенный ниже код для создания нескольких графиков.

ggplot(df_combined, aes(factor(names), y=mutations)) + 
geom_violin() +
geom_boxplot(width=.1, outlier.size=0, fill="grey50") +
stat_summary(fun.y=median, geom="point", fill="white", shape=21, size=4) +
xlab("Source") +
ylab("Number of mutations") +
theme(axis.text = element_text(colour = "black"))`

В то время как большинство из них отображаются просто отлично, некоторые из них начинают «раскачиваться» (лучший способ, которым я могу это объяснить). Вот пример, который не работает.

сюжет

Я предполагаю, что это потому, что мои данные дискретны, а не непрерывны, но я не могу найти ничего о том, как изменить это для сюжета скрипки. Есть ли способ заставить это работать с ggplot2 и geom_violin?

Данные ниже:

structure(list(mutations = c(6, 6, 6, 6, 6, 6), names = structure(c(1L, 1L, 1L, 1L, 1L,   
1L), .Label = c("1kG", "CG"), class = "factor")), .Names = c("mutations", "names"), 
row.names = c(NA, 6L), class = "data.frame") 

person Tubeman    schedule 06.12.2012    source источник
comment
не могли бы вы дать воспроизвести ваши данные, пожалуйста? dput(head(df_combined)) например   -  person agstudy    schedule 06.12.2012
comment
Я получаю это, когда делаю это: структура (список (мутации = c (6, 6, 6, 6, 6, 6), имена = структура (c (1L, 1L, 1L, 1L, 1L, 1L), .Label = c(1kG, CG), class = factor)), .Names = c(мутации, имена), row.names = c(NA, 6L), class = data.frame)   -  person Tubeman    schedule 06.12.2012
comment
Я думаю, что новый geom_dotplot, реализованный в ggplot2, был бы еще одним вариантом. Это похоже на график скрипки, но с необработанными значениями (например, график номер девять: docs.ggplot2 .org/current/geom_dotplot.html).   -  person Roman Luštrik    schedule 06.12.2012
comment
Это кажется правильным, хотя, возможно, эстетически неприятным (хотя я на самом деле думаю, что это довольно красиво): покачивания отражают неровности плотности при дискретных значениях. Как вы хотите выглядеть на графике? Предложение @RomanLuštrik кажется полезным. Другим потенциальным решением может быть увеличение пропускной способности сглаживания, используемого в geom_violin (т. е. более размытая плотность по значениям), хотя (1) я не уверен, что geom_violin дает вам такой контроль, и (2) он может удалить слишком много информации из сюжета...   -  person Ben Bolker    schedule 06.12.2012
comment
@BenBolker, почему бы не использовать это как решение?   -  person agstudy    schedule 06.12.2012
comment
Потому что потребуется немного больше работы, чтобы превратить его в реальное решение (например, я хотел бы привести geom_dotplot пример). Тем временем это было опубликовано в группе ggplot2 Google, где Уинстон Чанг также предоставил ответ: groups.google.com/forum/?fromgroups=#!topic/ggplot2/JT653NWKilQ Пока я занимаюсь этим, beanplot — еще одно возможное решение (хотя и не в пределах ggplot2 по состоянию на сейчас)   -  person Ben Bolker    schedule 06.12.2012


Ответы (1)


Я получил ответ от Уинстона Чанга на форуме ggplot2 . Хитрость заключается в использовании geom_violin(adjust=2), что сделает график гладким.

person Tubeman    schedule 06.12.2012
comment
Для справки в будущем, приятно не делать кросс-пост. Дайте одному источнику шанс (скажем, день), чтобы помочь вам, прежде чем обратиться к другому, и также упомяните о кросспостинге. - person Gregor Thomas; 06.12.2012