我需要绘制Tukey的测试结果,其中包括8组。我正在遵循R图画廊的例子,它适用于四个组。我试着花时间修改它1.将Tukey.levels <- TUKEY[variable]改为Tukey.levels <- TUKEY[variable],因为我有8个组。这在TUKEY[variable]中给了我错误:下标越界,所以我再次使用4 2。添加了更多的颜色
但是我不能得到在一个盒子图上显示所有28个比较的曲线图。以下是数据和我的代码
treatment <- rep(c("A", "B", "C", "D", "E","F","G","H"), each=20)
value=c( sample(2:5, 20 , replace=T) , sample(6:10, 20 , replace=T), sample(1:7, 20 , replace=T), sample(3:10, 20 , replace=T) , sample(10:20, 20 , replace=T),sample(11:15, 20 , replace=T),sample(6:12, 20 , replace=T),sample(3:3, 20 , replace=T) )
data=data.frame(treatment,value)
model=lm( data$value ~ data$treatment )
ANOVA=aov(model)
TUKEY <- TukeyHSD(x=ANOVA, 'data$treatment', conf.level=0.95)
plot(TUKEY , las=1 , col="brown")
generate_label_df <- function(TUKEY, variable){
Tukey.levels <- TUKEY[[variable]][,4]
Tukey.labels <- data.frame(multcompLetters(Tukey.levels)['Letters'])
Tukey.labels$treatment=rownames(Tukey.labels)
Tukey.labels=Tukey.labels[order(Tukey.labels$treatment) , ]
return(Tukey.labels)
}
LABELS <- generate_label_df(TUKEY , "data$treatment")
my_colors <- c(
rgb(143,199,74,maxColorValue = 255),
rgb(242,104,34,maxColorValue = 255),
rgb(111,145,202,maxColorValue = 255),
rgb(255,0,0,maxColorValue = 255),
rgb(0,255,255,maxColorValue = 255),
rgb(128,0,0,maxColorValue = 255),
rgb(128,0,128,maxColorValue = 255)
)
a <- boxplot(data$value ~ data$treatment , ylim=c(min(data$value) , 1.1*max(data$value)) , col=my_colors[as.numeric(LABELS[,1])] , ylab="value" , main="")
text( c(1:nlevels(data$treatment)) , a$stats[nrow(a$stats),]+over , LABELS[,1] , col=my_colors[as.numeric(LABELS[,1])] )如果这些组是相同的,那么它们应该用相同的颜色和相同的字母表示。
我还想知道generate_label是如何工作的。即使我有8个组,我也总是需要给4赋值吗?
发布于 2020-06-05 22:45:39
如果您使用的是R 4.0.0或更高版本,那么一个问题是data.frame函数更改了其默认行为。尝试调整函数内部的代码,以便为每个data.frame()调用stringsAsFactors = TRUE。还要确保加载了multicompView库,这在您的代码中没有提到:
treatment <- rep(c("A", "B", "C", "D", "E","F","G","H"), each=20)
set.seed(1) # for reproducability
value=c( sample(2:5, 20 , replace=T) , sample(6:10, 20 , replace=T), sample(1:7, 20 , replace=T), sample(3:10, 20 , replace=T) , sample(10:20, 20 , replace=T),sample(11:15, 20 , replace=T),sample(6:12, 20 , replace=T),sample(3:3, 20 , replace=T) )
data=data.frame(treatment,value, stringsAsFactors = T)
model=lm( data$value ~ data$treatment )
ANOVA=aov(model)
TUKEY <- TukeyHSD(x=ANOVA, 'data$treatment', conf.level=0.95)
plot(TUKEY , las=1 , col="brown")
library(multcompView) # load this library
generate_label_df <- function(TUKEY, variable){
Tukey.levels <- TUKEY[[variable]][,4] # leave this value as 4. It is extracting the 4th column of the TUKEY object.
Tukey.labels <- data.frame(multcompLetters(Tukey.levels)['Letters'], stringsAsFactors = TRUE)
Tukey.labels$treatment=rownames(Tukey.labels)
Tukey.labels=Tukey.labels[order(Tukey.labels$treatment) , ]
return(Tukey.labels)
}
LABELS <- generate_label_df(TUKEY , "data$treatment")
my_colors <- c(
rgb(143,199,74,maxColorValue = 255),
rgb(242,104,34,maxColorValue = 255),
rgb(111,145,202,maxColorValue = 255),
rgb(255,0,0,maxColorValue = 255),
rgb(0,255,255,maxColorValue = 255),
rgb(128,0,0,maxColorValue = 255),
rgb(128,0,128,maxColorValue = 255)
)
a <- boxplot(data$value ~ data$treatment , ylim=c(min(data$value) , 1.1*max(data$value)) , col=my_colors[as.numeric(LABELS[,1])] , ylab="value" , main="")
over <- 0.1*max( a$stats[nrow(a$stats),] )
text( c(1:nlevels(data$treatment)) , a$stats[nrow(a$stats),]+over , LABELS[,1] , col=my_colors[as.numeric(LABELS[,1])] )https://stackoverflow.com/questions/62215549
复制相似问题