Двухфакторные решетчатые боксплоты в R
Я хотел бы создать решетчатую диаграмму из данных, которые имеют несколько факторов и несколько уровней для каждого фактора.
Для каждого графика на графике решетки я бы хотел, чтобы ось x была комбинацией обоих факторов и их уровней, а ось y - значениями.
Ниже я привел некоторые примеры данных, которые показывают, как я могу создать график решетки для факторов, но не для факторов и их комбинаций уровней. Я не хочу 3D-графики, и я хотел бы использовать boxplots, если это вообще возможно.
library(plyr)
library(reshape2)
library(lattice)
col_t <- c("Factors","Levels",LETTERS[1:10])
data1 <- rnorm(1000)
dm <- matrix(data1, nrow = 100, ncol = 10, byrow = TRUE)
df <- data.frame(dm)
facs <- c(rep("M",25), rep("N",25), rep("O",25), rep("P",25))
levs <- c(rep(c("W","x","Y","Z"),25))
df <- cbind(facs,levs,df)
colnames(df) <- col_t
dfm <- melt(df, id.vars=c("Factors", "Levels"))
head(dfm)
# Creates the Lattice plot where the rnorm data is on the y-axis and the A factors are
# on the x-axis for every Variable in variable
All_Graph <- bwplot(value ~ Factors | variable,
data=dfm,
scales=list(relation="free",x=list(cex=1.1),y=list(cex=1.25)),
main= list("All Metric Values", cex=2.5),
xlab=list("Treatments", cex=2.5),
ylab=list("Metric Value", cex=2.5),
do.out = FALSE,
col="black",
coef=4
)
trel_wid <- 960
trellis.device(device="png", filename="All Var Plots.png", width= trel_wid, height= trel_wid*1.5)
print(All_Graph)
dev.off()
# Now I'd like to create a plot of each level of each factor. Where the x-axis is A*B
# and the y-axis is the rnorm data
All_Graph <- bwplot(value ~ Factors*Levels | variable,
data=dfm,
scales=list(relation="free",x=list(cex=1.1),y=list(cex=1.25)),
main= list("All Metric Values", cex=2.5),
xlab=list("Treatments", cex=2.5),
ylab=list("Metric Value", cex=2.5),
do.out = FALSE,
col="black",
coef=4
)
trel_wid <- 960
trellis.device(device="png", filename="All Var+Lev Plots.png", width= trel_wid, height= trel_wid*1.5)
print(All_Graph)
dev.off()
Любые предложения будут огромной помощью!
2 ответа
С помощью Джона я добрался до следующего. GGPlot с Facet_wrap был путь. Это быстрый и простой способ построения многоуровневых решеточных графиков.
library(plyr)
library(reshape2)
library(lattice)
col_t <- c("Factors","Levels",LETTERS[1:10])
data1 <- rnorm(1000)
dm <- matrix(data1, nrow = 100, ncol = 10, byrow = TRUE)
df <- data.frame(dm)
facs <- c(rep("M",25), rep("N",25), rep("O",25), rep("P",25))
levs <- c(rep(c("W","x","Y","Z"),25))
df <- cbind(facs,levs,df)
colnames(df) <- col_t
dfm <- melt(df, id.vars=c("Factors", "Levels"))
head(dfm)
sp <- ggplot(dfm, aes(x=Factors, y=value, fill=Levels)) +
geom_boxplot(coef=4, outlier.shape = NA, position = "dodge", alpha = 1,
lwd = 1, fatten = 0.75)
sp + facet_wrap(~variable, ncol=3, scales="free")
Используя решетку, вы можете попробовать это:
All_Graph <- bwplot(value ~ Factors : Levels | variable, # use interaction
data=dfm,
scales=list(relation="free",x=list(cex=1.1),y=list(cex=1.25)),
main= list("All Metric Values", cex=2.5),
xlab=list("Treatments", cex=2.5),
ylab=list("Metric Value", cex=2.5),
do.out = FALSE,
col="black",
coef=4
)
trel_wid <- 1500
trellis.device(device="png", filename="All Var+Lev Plots.png", width= trel_wid, height= trel_wid*1.5)
print(All_Graph)
dev.off()