Внешний вид графика изменяется в зависимости от размера окна RStudio и метода построения графика

#r

#r

Вопрос:

Я пытаюсь построить распределение в R, используя пакет vioplot; мой график состоит из диаграммы рассеяния точек с графиками скрипки (представляющими «ячейки» этих точек), нанесенных поверх диаграмм рассеяния.

Однако различные методы построения моих данных приводят к несколько иным характеристикам графика. Если все графики скрипки строятся с использованием цикла, хвосты графика скрипки будут простираться до самых нижних точек, но при построении по отдельности хвосты графика скрипки не будут достигать выбросов. Кроме того, изменение размера окна графика (а затем повторное построение графика) также изменяет вид хвостов графиков скрипки.

Поскольку я получаю эти разные графики, мне интересно, как определить, какой график является правильным представлением данных, и как получить согласованный результат. Я использовал аргументы ‘range’ и ‘coef’ в vioplot, чтобы сделать графики более согласованными, но это не сработало.

Спасибо!

Ответ №1:

Может быть, я ошибаюсь, но я думаю, что сама скрипка на самом деле не так определена и представляет собой простое для просмотра представление данных. С другой стороны, boxplot (который также отображается с помощью vioplot внутри скрипки) гораздо важнее, поскольку его столбцы указывают вам 50-й, 25-й и 75-й процентили (хотя 5-й в vioplot по какой-то причине является белой точкой), а усы зависят от того, как вы строите график, но вв случае vioplot я думаю, что это 95-й и 5-й процентили.

Если вам нужна более высокая настраиваемость, используйте ggplot:

 library(reshape2) #for melt()
library(ggplot2)
uniform<-runif(200,-4,4)
normal<-rnorm(200,0,3)
df <- data.frame(x=normal, y=uniform) %>% melt()

ggplot(df, aes(x=variable, y=value))  
  geom_violin()  
  geom_boxplot()
  

и если вы хотите отобразить все точки данных, а не только выбросы, вы можете использовать ggbeeswarm для этого, не отображая выбросы из geom_boxplot:

 library(ggbeeswarm)

ggplot(df, aes(x=variable, y=value))  
  geom_violin()  
  geom_boxplot(outlier.alpha = 0)  
  geom_beeswarm()
  

Комментарии:

1. Спасибо за ваш ответ. Я обнаружил, что ggplot намного проще в использовании и, безусловно, более последователен в построении графиков скрипки — он также был намного более настраиваемым, чем функция vioplot() . Спасибо!