我正在尝试创建一个易于理解的ggplot图,其中包含由geom_point的1) color (3种颜色;对于A,B和C变量而言)2)整体形状所描绘的3个子组(3个带边界的彩色形状;对于c,d和e标准),以及3)在各点上覆盖了十字形(2组;一些具有形状重叠,有些没有形状df $ Subscale = 1 vs. 0)。
我很难弄清楚如何将美学和没有的传奇结合起来。 3,因为这将代表第二种基于形状的美学。
这是我到目前为止的内容:
使用这些子组看起来还可以(除了颜色图例还不起作用)。接下来,我想使用df $ Subscale(例如A_1,C2_1,B_2而不是A,C,B2)为所有名称带有下划线的变量名称(y轴)覆盖一个形状。由于我已经在使用形状美学,因此我不知道如何有条件地重新应用形状。
我想要应用的形状示例:
这是示例数据集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)
有任何想法/技巧可以正确地将十字形应用于某些点并为其创建第三个图例?