问题描述
我最近正在构建一个自治函数,以对任何类型的数据框制作森林图,但是我无法理解“剪辑部分”,它表示它传递了箭头设计的最小值和最大值两个值,但是每当我通过它时,最小值似乎都无法正确显示,这是示例:
multivariate_forest_plot <- function(df,factor_col,value_col){
library(forestplot)
library(dplyr)
library(lattice)
df <- df %>%
group_by(eval(parse(text=factor_col))) %>%
summarise(total = sum(eval(parse(text=value_col)),na.rm=TRUE),average = round(mean(eval(parse(text=value_col)),0),minimum = min(eval(parse(text=value_col)),maximum = max(eval(parse(text=value_col)),variance = var(eval(parse(text=value_col)),stddev = sd(eval(parse(text=value_col)),count = n()
)
df <- data.frame(df)
colnames(df)[1] <- factor_col
print(head(df))
#1) Calculate Mean,Lower and Upper from the value columns
mean_value <- df$average
lower_value <- df$minimum
upper_value <- df$maximum
writeLines("mean value")
print(mean_value)
writeLines("lower value")
print(lower_value)
writeLines("upper value")
print(upper_value)
value_most_minimum <- min(lower_value,na.rm=TRUE)
value_most_maximum <- max(upper_value,na.rm=TRUE)
value_df <- data.frame(mean=mean_value,min=lower_value,max=upper_value)
value_df <- rbind(NA,value_df) #for header
value_df <- rbind(value_df,NA) #for space before grand summary
average_average <- mean(value_df$mean,na.rm=TRUE)
average_min <- mean(value_df$min,na.rm=TRUE)
average_max <- mean(value_df$max,na.rm=TRUE)
grand_value <- data.frame(mean=average_average,min=average_min,max=average_max)
value_df <- rbind(value_df,grand_value)
factor_table <- c()
avg_value_table <- c()
min_value_table <- c()
max_value_table <- c()
#2) Make Table Structure
table_length <- nrow(df) + 3
for(tab in 1:table_length){
if(tab==1){
#Header Colname
factor_table <- c(factor_table,as.character(factor_col))
avg_value_table <- c(avg_value_table,paste0(as.character(value_col),"(mean)"))
min_value_table <- c(min_value_table,"(min)"))
max_value_table <- c(max_value_table,"(max)"))
}
else if(tab > 1 && tab <= (table_length-2)){
#Main Body
factor_table <- c(factor_table,as.character(df[tab-1,1]))
avg_value_table <- c(avg_value_table,as.character(value_df$mean[tab]))
min_value_table <- c(min_value_table,as.character(value_df$min[tab]))
max_value_table <- c(max_value_table,as.character(value_df$max[tab]))
}
else if(tab > (table_length-2)){
#Grand Summary
if(tab == (table_length-1)){
factor_table <- c(factor_table,NA)
avg_value_table <- c(avg_value_table,NA)
min_value_table <- c(min_value_table,NA)
max_value_table <- c(max_value_table,NA)
}
else if(tab == (table_length)){
factor_table <- c(factor_table,"Summary Grand Average")
avg_value_table <- c(avg_value_table,as.character(value_df$mean[tab]))
min_value_table <- c(min_value_table,as.character(value_df$min[tab]))
max_value_table <- c(max_value_table,as.character(value_df$max[tab]))
}
}
}
tabletext <- cbind(factor_table,avg_value_table,min_value_table,max_value_table)
writeLines("")
writeLines("====================Value DF Provided=============================")
writeLines("")
print(value_df)
writeLines("")
writeLines("====================Table Text Provided=============================")
writeLines("")
print(tabletext)
trellis.device(device = "windows",height = 600,width = 1200,color = TRUE)
print(paste0("most maximum value = ",value_most_maximum))
print(paste0("most minimum value = ",value_most_minimum))
forestplot(tabletext,value_df,new_page = TRUE,is.summary=c(TRUE,rep(FALSE,nrow(df)),TRUE,TRUE),clip=c(value_most_minimum,value_most_maximum),xlog=TRUE,col=fpColors(Box="royalblue",line="darkblue",summary="royalblue",hrz_lines = "#444444"),vertices = TRUE)
}
在此示例中,我选择CO2数据集来解释森林图,如下所示:
factor_merge <- function(df,factor_col1,factor_col2,sep="-",merge_name="merged_factor"){
factor_vector <- paste0(as.character(df[[factor_col1]]),sep,as.character(df[[factor_col2]]))
df[[merge_name]] <- as.factor(factor_vector)
return(df)
}
CO2_merged_factor <- factor_merge(CO2,"Type","Treatment",merge_name = "Type_Treatment")
CO2_merged_factor <- factor_merge(CO2_merged_factor,"Type_Treatment","conc",merge_name = "Type_Treatment_conc")
最后,我用这个来解释森林图:
multivariate_forest_plot(CO2_merged_factor,"Type_Treatment_conc","uptake")
结果如下所示:
此示例的剪辑最小值必须为7.7,最大值应为45.5,但是箭头显示的7.7值是从中点(中心)开始而不是从头开始,有人知道如何处理吗?谢谢您的反馈
我会通过以下基本参考资料来做到这一点:https://cran.r-project.org/web/packages/forestplot/vignettes/forestplot.html
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)