在ggplot中添加多个形状图例并覆盖形状

时间:2018-10-29 18:51:13

标签: r ggplot2

我正在尝试创建一个易于理解的ggplot图,其中包含由geom_point的1) color (3种颜色;对于A,B和C变量而言)2)整体形状所描绘的3个子组(3个带边界的彩色形状;对于c,d和e标准),以及3)在各点上覆盖了十字形(2组;一些具有形状重叠,有些没有形状df $ Subscale = 1 vs. 0)。

我很难弄清楚如何将美学和没有的传奇结合起来。 3,因为这将代表第二种基于形状的美学。

这是我到目前为止的内容:graph with first 2 subgroups

使用这些子组看起来还可以(除了颜色图例还不起作用)。接下来,我想使用df $ Subscale(例如A_1,C2_1,B_2而不是A,C,B2)为所有名称带有下划线的变量名称(y轴)覆盖一个形状。由于我已经在使用形状美学,因此我不知道如何有条件地重新应用形状。

我想要应用的形状示例:overlay applied to all points when I want it only applied to some

这是示例数据集df的代码:

#The way my data is currently structured

a<- c("A", "A_1", "A_2", "A_3", "A2", "A2_1", "A2_2",
              "B", "B_1", "B_2", "B2", "B2_1",
              "C", "C_1", "C_2", "C2", "C2_1")
b<- c(rep(1, times=4),
            rep(2, times = 3),
            rep(1, times = 3),
            rep(2, times = 2),
            rep(1, times = 3),
            rep(2, times = 2))
col<- c(rep(1, times=7),
      rep(2, times = 5),
      rep(3, times = 5))
u <- c(0, rep(1, times=3),
       0, rep(1, times = 2),
       0, rep(1, times = 2),
      0, rep(1, times = 1),
      0, rep(1, times = 2),
      0, rep(1, times=1))
set.seed(12)
c <- round(rnorm(17, .5, 1),2)
d <- round(rnorm(17, .0, .5),2)
e <- round(rnorm(17, -.2, .5),2)

dat<-data.frame(cbind(a, b, col, u, c, d, e))

#Restructuring for graphing

library(reshape)
df <- melt(dat, id.vars = c("a", "b", "col", "u"))
colnames(df) <- c("Name", "Type", "Color", "Subscale", "Criteria", "Value")
df$Value<- as.numeric(as.character(df$Value))
df$Name_order <- factor(df$Name, levels=df$Name[order(df$Value[df$Criteria == "c"])], ordered=TRUE)

以下是创建图形的代码:

    palette <- c("#56B4E9",  "#D55E00","#009E73")
   graph_test <- ggplot(df, aes(x=df$Value, y = df$Name_order, 
                      colour = df$Color, shape = df$Criteria)) +
  geom_point(size = 6, aes(#colour=factor(df$Color),
                           fill=factor(df$Color),
                           shape=factor(df$Criteria))) + 
  scale_shape_manual(values=c(21, 24, 22),
                     labels=c("Criteria1", "Criteria2", "Criteria3")) +
  scale_fill_manual(values=palette,
                    labels = "c", "d", "e") +
  scale_color_manual(values=c(rep("black", times = 3)))  +
  labs(fill = "ABC", shape = "Criteria") 

#First graph
graph_test

#Second graph
graph_test + geom_point(size = 5, shape=3)

我考虑了形状aes的6个类别,但是我仍然需要有条件地覆盖十字形,并且我更喜欢3个图例(3种颜色,3种形状,2种覆盖与否)。

df$CriteriabySub <- paste0(df$Criteria, df$Subscale)

有任何想法/技巧可以正确地将十字形应用于某些点并为其创建第三个图例?

0 个答案:

没有答案