基于轴颜色的ggplot图例

时间:2021-06-15 18:08:31

标签: r ggplot2 legend yaxis geom-tile

我正在尝试根据我设置的 y 轴的颜色在 ggplot 中创建一个图例。

有谁知道是否有一种方法可以根据图中不存在的数据手动创建图例?

以下是情节和代码的玩具示例。在此图中,我绘制了 3 天不同天的学生成绩图表。学生的名字根据他们所在的班级着色。我想知道我是否可以添加一个额外的图例,显示“A 班”为绿色,“B 班”为紫色。 enter image description here

另外说明一下,我意识到日子并不好过。我现在并不担心这个。

谢谢!

library(tidyverse)

name <- c("Mike", "Mike","Mike",
          "Sam","Sam","Sam", 
          "Max","Max","Max", 
          "Sarah","Sarah","Sarah") 
date <- c("Monday", "Wednesday", "Friday",
          "Monday", "Wednesday", "Friday",
          "Monday", "Wednesday", "Friday",
          "Monday", "Wednesday", "Friday")
grade <- c(100, 98, 93, 
           92, 64, 90, 
           80, 88,70,
           90,94,100)
classroom <- c("Class A", "Class A","Class A", 
               "Class A", "Class A","Class A", 
               "Class B", "Class B","Class B", 
               "Class B", "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") 

1 个答案:

答案 0 :(得分:0)

你可以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)

enter image description here

facet_grid

plot + facet_grid(rows = vars(classroom))

enter image description here