2017-03-20 3 views
1

Ich versuche, die Werte in der x-Achse von Vioplot zu ändern. Ich habe einen Vorschlag und schrieb:Ändern Sie die x-Achse im Violinplot in R

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) 

Aber es scheint, dass die Werte in der a-Achse 1-2-3 hinzugefügt, die ich will nicht präsentiert werden.

danke

+0

ja. aber nur, wenn ich eine Liste für die Werte in der Geige weitergeben kann und nicht jede Ebene einzeln angeben muss. – user552231

Antwort

1

Sie haben Ihre Daten in der Liste() Format, so dass es zu Datenrahmen umgewandelt werden muss. Schmelzen Sie dann den Datenrahmen, indem Sie die Werte übereinander stapeln.

Mit geom_violin erstellen wir das Kernel Density Plot und mit geom_boxplot erstellen wir Boxplot über Kerndichtediagramm. Die Breite des Boxplots wird mit width gesteuert.

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 

enter image description here

trim = 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 

enter image description here

Daten:

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) 
Verwandte Themen