Изменить ось X на графике скрипки в R

Я пытаюсь изменить значения по оси x vioplot. Я воспользовался предложением и написал:

library(vioplot)  
labels=c(10,20,30)  
x1=c(1,2,3,4)  
x2=c(5,6,7,8,9,10)  
x3=c(11,12,13,14,15,16)  
x=list(x1,x2,x3)  
do.call(what = vioplot, args = x)  
axis(side=1,at=1:length(labels),labels=labels)  

Но кажется, что значения по оси а добавляются к 1-2-3, которые я не хочу представлять.

благодарю вас


person user552231    schedule 20.03.2017    source источник
comment
да. но только если я могу передать список значений в скрипке и не указывать каждый уровень отдельно.   -  person user552231    schedule 20.03.2017


Ответы (1)


У вас есть данные в формате list(), поэтому их нужно преобразовать в фрейм данных. Затем расплавьте фрейм данных, наложив значения друг на друга.

Используя geom_violin, мы создаем график плотности ядра, а с помощью geom_boxplot мы создаем коробчатую диаграмму поверх графика плотности ядра. Ширина диаграммы регулируется с помощью width.

library('ggplot2')
library('reshape2')
df <- data.frame( lapply(x, function(y) {length(y) <- max(lengths(x)); y}))  # create data frame from list of x
colnames(df) <- as.character(labels)  # change column names to labels
df <- melt(df)                        # melt data frame
df <- df[ !is.na(df$value), ]         # remove NA
ggplot(data = df ) + 
  geom_violin(aes(x = variable, y = value, fill = variable )) +   # kernel density plot
  geom_boxplot(aes(x = variable, y = value ), width = 0.1) +   # box plot
  xlab( " labels " ) +   # x axis title
  ylab( " values " )     # y axis title

введите здесь описание изображения

обрезка = FALSE

ggplot(data = df ) + 
  geom_violin(aes(x = variable, y = value, fill = variable ), trim = FALSE ) +   # kernel density plot
  geom_boxplot(aes(x = variable, y = value ), width = 0.1) +   # box plot
  xlab( " labels " ) +   # x axis title
  ylab( " values " )     # y axis title

введите здесь описание изображения

Данные:

labels=c(10,20,30)  
x1=c(1,2,3,4)  
x2=c(5,6,7,8,9,10)  
x3=c(11,12,13,14,15,16)  
x=list(x1,x2,x3) 
person Sathish    schedule 20.03.2017