首页 > 解决方案 > 组合(叠加)ggplots

问题描述

我正在尝试组合 3 个 ggplots 而不改变任何关于情节的内容。我试图将它们相互添加,但线条的颜色变成了图例中的一种颜色。此外,我有 6 种不同类型的线条而不是 2 种。这是我为每个绘图 n1、n2 和 n3 所拥有的。

x1  <- c(10,30,50,70,100,10,30,50,70,100)
Power1<- c(0.633,0.994,0.998,0.999,1.000,0.422,0.771,0.837,0.888,0.953)
Method1 <- c(rep("Parametric, Case I", 5), rep("Nonparametric, Case I", 5))
df1 <- data.frame(Method1, Power1)

n1 <- ggplot(df1, aes(x1)) +
  geom_line(aes(y=Power1,x=x1, color=Method1, linetype=Method1),color="green")+
  ggtitle("Power Plot for Case I, d=2") + theme(plot.title = element_text(hjust = 0.5)) +
  xlab("Sample size") + ylab("Power") +
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
          panel.background = element_blank(), axis.line = element_line(colour = "black"))


x2  <- c(10,30,50,70,100,10,30,50,70,100)
Power2<- c(0.629,0.986,0.997,0.999,1.000,0.418,0.741,0.809,0.874,0.932)
Method2 <- c(rep("Parametric, Case II", 5), rep("Nonparametric, Case II", 5))
df2 <- data.frame(Method2, Power2)

n2 <- ggplot(df2, aes(x2)) +
  geom_line(aes(y=Power2,x=x2, color=Method2, linetype=Method2),color="red")+
  ggtitle("Power Plot for Case II, d=2") + theme(plot.title = element_text(hjust = 0.5)) +
  xlab("Sample size") + ylab("Power") +
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
        panel.background = element_blank(), axis.line = element_line(colour = "black"))


x3  <- c(10,30,50,70,100,10,30,50,70,100)
Power3<- c(0.599,0.908,0.994,0.999,1.000,0.379,0.613,0.765,0.832,0.917)
Method3 <- c(rep("Parametric, Case III", 5), rep("Nonparametric, Case III", 5))
df3 <- data.frame(Method3, Power3)

n3<- ggplot(df3, aes(x3)) +
  geom_line(aes(y=Power3,x=x3, color=Method3, linetype=Method3),color="blue")+
  ggtitle("Power Plot for Case III, d=2") + theme(plot.title = element_text(hjust = 0.5)) +
  xlab("Sample size") + ylab("Power") +
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
        panel.background = element_blank(), axis.line = element_line(colour = "black"))

标签: rggplot2

解决方案


绑定数据框并仅在单个 ggplot 调用中将变量用于审美。

library(tidyverse)
Power<- c(0.633,0.994,0.998,0.999,1.000,0.422,0.771,0.837,0.888,0.953)
x1  <- c(10,30,50,70,100,10,30,50,70,100)
Method <- c(rep("Parametric, Case I", 5), rep("Nonparametric, Case I", 5))
df1 <- data.frame(Method, Power, x=x1)

x2  <- c(10,30,50,70,100,10,30,50,70,100)
Power<- c(0.629,0.986,0.997,0.999,1.000,0.418,0.741,0.809,0.874,0.932)
Method <- c(rep("Parametric, Case II", 5), rep("Nonparametric, Case II", 5))
df2 <- data.frame(Method, Power,x =x2)

x3  <- c(10,30,50,70,100,10,30,50,70,100)
Power <- c(0.599,0.908,0.994,0.999,1.000,0.379,0.613,0.765,0.832,0.917)
Method <- c(rep("Parametric, Case III", 5), rep("Nonparametric, Case III", 5))
df3 <- data.frame(Method, Power, x= x3)


df_bind <- bind_rows(df1, df2, df3, .id = 'method_id') # add data frame ids for method colouring. 

ggplot(df_bind, aes(x, Power)) +
  geom_line(aes(color = method_id, linetype = grepl('Parametric', Method))) +
  scale_color_manual(values = c('green', 'red', 'blue'))

reprex 包于 2020-03-16 创建(v0.3.0)

我为线型添加了条件语句。为了使这更优雅,您可以使用相同的语句创建一个帮助列,或者通过更改名称/值scale_linetype_manual


推荐阅读