问题描述
我正在尝试根据我设置的 y 轴的颜色在 ggplot 中创建一个图例。
有谁知道是否有一种方法可以根据图中不存在的数据手动创建图例?
以下是情节和代码的玩具示例。在此图中,我绘制了 3 天不同天的学生成绩图表。学生的名字根据他们所在的班级着色。我想知道我是否可以添加一个额外的图例,显示“A 班”为绿色,“B 班”为紫色。
另外说明一下,我意识到日子并不好过。我现在并不担心这个。
谢谢!
library(tidyverse)
name <- c("Mike","Mike","Sam","Max","Sarah","Sarah")
date <- c("Monday","Wednesday","Friday","Monday","Friday")
grade <- c(100,98,93,92,64,90,80,88,70,94,100)
classroom <- c("Class A","Class A","Class B","Class B")
df <- data.frame(cbind(name,date,grade,classroom)) %>%
mutate(grade = as.integer(grade),classroom = as.factor(classroom))
plot <- ggplot(df,aes(y=name,x=date,fill= grade < 90)) +
geom_tile() +
scale_fill_manual(name = " ",values = c( "turquoise3","lightgrey"),labels = c("Above 90","At or below 90" )) +
theme(axis.text.y = element_text(color = ifelse(levels(df$classroom) %in% "Class A","Green","Purple"))) +
guides(size = "none",color = "none",alpha = "none")
解决方法
你可以facet_wrap
plot <- ggplot(df,aes(y=name,x=date,fill= grade < 90)) +
geom_tile() +
scale_fill_manual(name = " ",values = c( "turquoise3","lightgrey"),labels = c("Above 90","At or below 90" )) +
theme(axis.text.y = element_text(color = ifelse(levels(df$classroom) %in% "Class A","Green","Purple"))) +
guides(size = "none",color = "none",alpha = "none")
plot + facet_wrap(~classroom)
或facet_grid
plot + facet_grid(rows = vars(classroom))