我有以下列的数据:lot,sublot,size,data。我有多个批次,每个批次可以有多个子批次。每个子图的大小为1到4。
我使用以下代码为此数据创建了一个箱形图:
df <-
readXL("Z:/R_Files/example.xlsx",
rownames=FALSE, header=TRUE, na="", sheet="Sheet1",
stringsAsFactors=TRUE)
x11()
par(mar=c(10.1, 5.1, 4.1, 2.1))
boxplot(data ~ size*sublot*lot,
xlab="", ylab="Data", main="Data by Size, Sublot, Lot",
las=2,
data=df)
title(xlab='Size.Sublot.Lot', line=9)
我想使用boxfill命令根据批次#为每个箱图着色。我见过两种解决方案:
我更愿意创建一个“动态”解决方案,根据我文件中的批次条目数创建颜色向量。
我试图创建:
uniqlot <- unique(df$lot)
colr <- palette(rainbow(length(uniqlot)))
但是因为colr向量中的条目没有重复size.sublot.lot的唯一组合的数量而被卡住了。注意:我希望批量ABC的所有箱图都用一种颜色着色,所有用于批量DEF的箱图用另一种颜色着色等。
我正在附上未上色的箱线图。 Uncolored Boxplot
可以通过以下链接访问原始数据(example.xlsx): example.xlsx
答案 0 :(得分:0)
这就是我要做的事情:
n1 <- length(unique(df$sublot))
n2 <- length(unique(df$size))
colr <- palette(rainbow(length(n)))
colr <- rep(colr, each = n1*n2)
boxplot(data ~ size*sublot*lot,
col = colr,
xlab="", ylab="Data", main="Data by Size, Sublot, Lot",
las=2,
data=df)
使用ggplot:
df$size <- as.factor(df$size)
ggplot(df, aes(sublot, data, group = interaction(size, sublot), col = size)) +
geom_boxplot() +
facet_wrap(~lot, nrow = 1)
另外,如果你想要连续的颜色,你可以摆脱df$size <- as.factor(df$size)
。
答案 1 :(得分:0)
感谢回复中提供的指针,经过深入挖掘后,我能够找到解决自己问题的方法。我想提交这段代码以防有人需要复制。
这是此代码创建的boxplot的图片(我想创建)。 colored boxplot
df <-
readXL("Z:/R_Files/example.xlsx",
rownames=FALSE, header=TRUE, na="", sheet="Sheet1",
stringsAsFactors=TRUE)
unqlot <- unique(df$lot)
unqsublot <- unique(df$sublot)
unqsize <- unique(df$size)
cul <- palette(rainbow(length(unqlot)))
culur <- character()
for (i in 1:length(unqsize)) {
culur_temp = rep(cul[i], each=(length(unqsize)*length(unqsublot)))
culur = c(culur, culur_temp)
}
par(mar=c(10.1, 5.1, 4.1, 2.1))
boxplot(data ~ size*sublot*lot,
xlab="", ylab="Data", main="Data by Size, Sublot, Lot",
col = culur,
las=2,
data=df)