Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
forestplot使用不同的形状或颜色_R_Forestplot - Fatal编程技术网

forestplot使用不同的形状或颜色

forestplot使用不同的形状或颜色,r,forestplot,R,Forestplot,我想创建一个具有调整值(每个层的顶行)和匹配值(每个层中由X表示的线)的绘图,跨越所有层,例如男性、女性、55岁等。对于匹配的值,我希望有一个菱形/其他形状或不同的颜色来突出显示。但不知道怎么办 我意识到我可以用这个例子创建两个独立的数据集,一个用于调整值,另一个用于匹配值,然后组合,但不必再次输入所有值 请有人帮我编辑代码的第三部分,为我的图表中的匹配值制作一个diff形状或diff颜色(匹配的VAL是N列中X表示的线) 库(forestplot) main_acevccb我意识到我可以使用这

我想创建一个具有调整值(每个层的顶行)和匹配值(每个层中由X表示的线)的绘图,跨越所有层,例如男性、女性、55岁等。对于匹配的值,我希望有一个菱形/其他形状或不同的颜色来突出显示。但不知道怎么办

我意识到我可以用这个例子创建两个独立的数据集,一个用于调整值,另一个用于匹配值,然后组合,但不必再次输入所有值

请有人帮我编辑代码的第三部分,为我的图表中的匹配值制作一个diff形状或diff颜色(匹配的VAL是N列中X表示的线)

库(forestplot)
main_acevccb我意识到我可以使用这个示例创建两个单独的数据集,一个用于调整值,一个用于匹配值,然后组合,但不必再次输入所有值

选项1如果您想坚持使用
forestplot
我认为您提到(或)的链接中描述的解决方案是最佳的。 您不必键入所有数据,只需向数据帧添加一个额外的列,然后将其子集

# You can add the column like this: 
type = c(NA, NA, NA, "adjusted", "matched","adjusted", "matched", NA, "adjusted", "matched","adjusted", "matched", NA, "adjusted", "matched","adjusted", "matched", "adjusted", "matched")

# So your dataframe will look like this: 
main_acevccb <- structure(list(
    mean  = c(NA, NA, NA, -1.12, -0.64, -1.55,-1.60, NA, -1.35,-1.44, -1.3, -1.2, NA, -1.29,-1.23, -2.82,-2.15, -1.84,-2.72), 
    lower = c(NA, NA, NA, -1.41, -0.84, -1.85, -1.86, NA, -1.71,-1.9, -1.57,-1.52, NA, -1.53, -1.54, -4.04, -3.61, -2.85,-4.45),
    upper = c(NA, NA, NA, -0.83, -0.44, -1.26, -1.34, NA, -1.0, -0.98,-1.04, -0.87, NA, -1.04,-0.93, -1.59,-0.68, -0.82, -0.99),
    type = c(NA, NA, NA, "adjusted", "matched","adjusted", "matched", NA, "adjusted", "matched","adjusted", "matched", NA, "adjusted", "matched","adjusted", "matched", "adjusted", "matched")),
   .Names = c("Difference", "lower", "upper", "type"), 
   row.names = c(NA, -19L), 
   class = "data.frame")

# ...and then you subset it:
adjusted <- subset(main_acevccb, type!="matched"|is.na(type))
matched  <- subset(main_acevccb, type!="adjusted"|is.na(type))

非常感谢你的建议。我已经把我的答案代码贴在上面了。然而,我有点不知道如何在这个图中添加额外的列,例如“n”、“Diff”和“95%CI”,正如我在上面的原始图中概述的那样@MaxGordon的代码(在上面的链接中提供)建议创建一个矩阵,并在行名称中添加额外的信息。这对我来说很复杂,因为我有太多的可乐要加。你有什么想法吗?我想我见过添加文本列或多个图形符号的方法,但不是同时添加两个。从技术上讲,图中已经显示了差异和95%,所以它们是一个可以忽略的冗余(?)。样本量可以包括在主组名中,如“雄性(n=x)”。或者你可以把它放在一列中。有问题的是为调整后的组和匹配的组获取文本标签。我同意你关于冗余的观点,但我必须提供这些数据。n不能仅仅添加到主组名(例如,男性n=x),因为n对于调整和匹配是不同的。所以我真的需要添加额外的列。我上面介绍的代码可以做到这一点,但我可以通过使用不同的形状/颜色来突出显示匹配的组。这就是为什么我希望对我的原始代码进行修改。我认为解决方案可能是使用我上面列出的原始代码,但使用类似以下代码改变方框颜色:col=fpColors(box=“royalblue”、“green”、“yellow”、“red”、“purple”、“pink”、“orange”、“royalblue”、“green”、“yellow”、“red”、“purple”、“purple”、“purple”、“pink”、“orange”)).这段代码实际上不起作用,但我怀疑这就是解决方案所在。你有没有看到这个软件包在任何地方使用过它?我见过使用ggplot的解决方案可以获得相同的结果,但使用forestplot的解决方案却不一样。。。一种方法是为n/Diff/CI95%的值创建一个单独的图和一个表(您甚至可以将它们连接到两个面板图中)。
 main_acevccb <- structure(list(
   analysis = c( "Male","Male", "Female", "Female", NA, "<55", "<55", ">55", ">55",NA, "White", "White", "Black","Black", "SA", "SA"),
   mean  = c( -1.12, -0.64, -1.55,-1.60, NA, -1.35,-1.44, -1.3, -1.2, NA, -1.29,-1.23, -2.82,-2.15, -1.84,-2.72), 
    lower = c( -1.41, -0.84, -1.85, -1.86, NA, -1.71,-1.9, -1.57,-1.52, NA, -1.53, -1.54, -4.04, -3.61, -2.85,-4.45),
    upper = c( -0.83, -0.44, -1.26, -1.34, NA, -1.0, -0.98,-1.04, -0.87, NA, -1.04,-0.93, -1.59,-0.68, -0.82, -0.99),
    type = c( "adjusted", "matched","adjusted", "matched", NA, "adjusted", "matched","adjusted", "matched", NA, "adjusted", "matched","adjusted", "matched", "adjusted", "matched")),
    .Names = c("Analysis","Difference", "lower", "upper", "type"), 
    row.names = (c(NA, -16L)), 
    class = "data.frame")


adjusted <- subset(main_acevccb, type!="matched"|is.na(type))
matched  <- subset(main_acevccb, type!="adjusted"|is.na(type))


forestplot(mean=cbind(adjusted[,"Difference"], matched[,"Difference"]),
           lower=cbind(adjusted[,"lower"], matched[,"lower"]), 
           upper=cbind(adjusted[,"upper"], matched[,"upper"]), 
           labeltext=matched$Analysis,
          legend=c("Adjusted", "Matched"),
          legend.pos=("bottomright"),           
          legend.gp = gpar(col="#AAAAAA"), 
          legend.r=unit(.1, "snpc"),
            fn.ci_norm = c(fpDrawNormalCI, fpDrawCircleCI),
           boxsize = .30, 
           line.margin = .5, 
           clip=c(-4.0, 1.0), 
           xticks=c(-4.0, -3.5, -3.0, -2.5, -2.0, -1.5, -1.0, -0.5, 0, 0.5, 1),
           col=fpColors(box=c("darkblue", "darkred")),
           xlab="Diff in Systolic BP CCB vs ACE-I/ARB",
           new_page=TRUE)
# You can add the column like this: 
type = c(NA, NA, NA, "adjusted", "matched","adjusted", "matched", NA, "adjusted", "matched","adjusted", "matched", NA, "adjusted", "matched","adjusted", "matched", "adjusted", "matched")

# So your dataframe will look like this: 
main_acevccb <- structure(list(
    mean  = c(NA, NA, NA, -1.12, -0.64, -1.55,-1.60, NA, -1.35,-1.44, -1.3, -1.2, NA, -1.29,-1.23, -2.82,-2.15, -1.84,-2.72), 
    lower = c(NA, NA, NA, -1.41, -0.84, -1.85, -1.86, NA, -1.71,-1.9, -1.57,-1.52, NA, -1.53, -1.54, -4.04, -3.61, -2.85,-4.45),
    upper = c(NA, NA, NA, -0.83, -0.44, -1.26, -1.34, NA, -1.0, -0.98,-1.04, -0.87, NA, -1.04,-0.93, -1.59,-0.68, -0.82, -0.99),
    type = c(NA, NA, NA, "adjusted", "matched","adjusted", "matched", NA, "adjusted", "matched","adjusted", "matched", NA, "adjusted", "matched","adjusted", "matched", "adjusted", "matched")),
   .Names = c("Difference", "lower", "upper", "type"), 
   row.names = c(NA, -19L), 
   class = "data.frame")

# ...and then you subset it:
adjusted <- subset(main_acevccb, type!="matched"|is.na(type))
matched  <- subset(main_acevccb, type!="adjusted"|is.na(type))
# add 2 extra columns to your dataframe
y=c(19, 18, 17, 16, 15, 14,13, 12, 11,10, 9, 8, 7, 6,5, 4,3, 2,1),
Analysis=c("","","", "Male", "Male","Female","Female", "", "Aged <55yrs","Aged <55yrs",  "Aged >=55yrs", "Aged >=55yrs", "", "White", "White", "Black", "Black", "South Asian", "South Asian")),

# so it will look like this:
main_acevccb <- 
  structure(list(
    mean  = c(NA, NA, NA, -1.12, -0.64, -1.55,-1.60, NA, -1.35,-1.44, -1.3, -1.2, NA, -1.29,-1.23, -2.82,-2.15, -1.84,-2.72), 
    lower = c(NA, NA, NA, -1.41, -0.84, -1.85, -1.86, NA, -1.71,-1.9, -1.57,-1.52, NA, -1.53, -1.54, -4.04, -3.61, -2.85,-4.45),
    upper = c(NA, NA, NA, -0.83, -0.44, -1.26, -1.34, NA, -1.0, -0.98,-1.04, -0.87, NA, -1.04,-0.93, -1.59,-0.68, -0.82, -0.99),
    type = c(NA, NA, NA, "adjusted", "matched","adjusted", "matched", NA, "adjusted", "matched","adjusted", "matched", NA, "adjusted", "matched","adjusted", "matched", "adjusted", "matched"),
    y=c(19, 18, 17, 16, 15, 14,13, 12, 11,10, 9, 8, 7, 6,5, 4,3, 2,1),
    Analysis=c("","","", "Male", "Male","Female","Female", "", "Aged <55yrs","Aged <55yrs",  "Aged >=55yrs", "Aged >=55yrs", "", "White", "White", "Black", "Black", "South Asian", "South Asian")),
  .Names = c("Difference", "lower", "upper", "type", "y", "Analysis"), 
    row.names = c(NA, -19L), 
    class = "data.frame")

# and make a graph with ggplot
p <- ggplot(data=main_acevccb,
       aes(x = type,y = Difference, ymin = lower, ymax = upper ))+
  geom_pointrange(aes(col=type))+
  geom_hline(aes(fill=type),yintercept =0, linetype=2)+
  xlab('Type')+ ylab("Your axis title)")+
  geom_errorbar(aes(ymin=lower, ymax=upper,col=type),width=0.5,cex=1)+
  facet_wrap(~Analysis,strip.position="left",nrow=9,scales = "free_y") +
  theme(plot.title=element_text(size=16,face="bold"),
    axis.text.y=element_blank(),
    axis.ticks.y=element_blank(),
    axis.text.x=element_text(face="bold"),
    axis.title=element_text(size=12,face="bold"),
    strip.text.y = element_text(hjust=0,vjust = 1,angle=180,face="bold"))+
  coord_flip()
p <- p+ylim(-5, 5)

# and finally add the text labels (modify it to get the labels you want) 
p <- p+geom_text(label=c(rep("Difference (CI95%)")), y=1, hjust="left")  
p