R:将自定义图例添加到ggplot

我有以下情节:

在此处输入图片说明

并想添加一个图例如下: 在此处输入图片说明

这是我用来生成绘图的代码:

library(data.table)
library(ggplot2)

blue <- "#4472C4"
green <- "#548235"
red <- "#C55A11"
redblood <- "#C00000"

DT <- data.table(student = c("Jane", "Sam", "Tim", "Kate", "Claire"),
                 grade = c(10, 14, 8, 9, 19))

b0 <- 13

DT[, gradeHat := b0]
DT[, e := grade - gradeHat]
DT[, SS := sum(e**2)]

DT[, id := 1:nrow(DT)]
DT[, xmin := id]
DT[, xmax := id + abs(e)/20*3]
DT[, ymin := min(grade, gradeHat), id]
DT[, ymax := max(grade, gradeHat), id]
DT[, student := factor(student, levels = student)]

gg <- ggplot(DT) +
  geom_segment(aes(x = student, xend = student, y = grade, yend = gradeHat),
               color = redblood, size = 1.3) +
  geom_rect(aes(xmin = xmin, xmax = xmax, ymin = ymin, ymax = ymax),
            fill = redblood, alpha = .4) +
  geom_hline(yintercept = b0, color = green, alpha = .7, size = 1, linetype = "dashed") +
  geom_point(aes(student, grade), color = blue, size = 4) +
  geom_point(aes(student, gradeHat), color = green, size = 4) +
  scale_y_continuous(breaks = 0:20, limits = c(0, 20)) +
  coord_fixed(.15) +
  theme_classic()

plot(gg)
斯蒂芬

并非您问题的完整解决方案...但目前我能提出的最好方案是:

  1. 要在ggplot中获得图例,您必须映射美学,即,不必将颜色设置为参数,而必须在上colorfill内部映射aes()为此,您可以使用占位符或标签,例如fill="SS"在中geom_rect

  2. 要获得正确的颜色,您可以使用scale_color/fill_manual使用标签可以轻松分配正确的颜色。

  3. 接下来,要正确设置图例的样式,可以使用guide_legend及其参数override.aes来设置颜色图例的形状和线型。

  4. 默认情况下,colorfill图例之间有一些间距,但是可以theme()通过legend.spacing删除legend.margin

  5. 最后一部分是为图例标签着色。这可以通过ggtext通过主题选项legend.text = element_markdown()允许使用HTML和CSS设置图例条目样式来实现

不幸的是我无法弄清楚如何在你的帽子上戴宽阔的帽子gradeHat

library(data.table)
library(ggplot2)

blue <- "#4472C4"
green <- "#548235"
red <- "#C55A11"
redblood <- "#C00000"

DT <- data.table(student = c("Jane", "Sam", "Tim", "Kate", "Claire"),
                 grade = c(10, 14, 8, 9, 19))

b0 <- 13

DT[, gradeHat := b0]
DT[, e := grade - gradeHat]
DT[, SS := sum(e**2)]

DT[, id := 1:nrow(DT)]
DT[, xmin := id]
DT[, xmax := id + abs(e)/20*3]
DT[, ymin := min(grade, gradeHat), id]
DT[, ymax := max(grade, gradeHat), id]
DT[, student := factor(student, levels = student)]

ggplot(DT) +
  geom_segment(aes(x = student, xend = student, y = grade, yend = gradeHat, color = "error"),
               , size = 1.3) +
  geom_rect(aes(xmin = xmin, xmax = xmax, ymin = ymin, ymax = ymax, fill = "SS"), alpha = .4) +
  geom_hline(yintercept = b0, color = green, alpha = .7, size = 1, linetype = "dashed") +
  geom_point(aes(student, grade, color = "grade"), size = 4) +
  geom_point(aes(student, gradeHat, color = "gradeHat"), size = 4) +
  scale_color_manual(breaks = c("grade", "gradeHat", "error"), 
                     values = c(grade = blue, gradeHat = green, error = red),
                     labels = c(grade = glue::glue("<span style = 'color: {blue};'>grade</span>"),
                                gradeHat = glue::glue("<span style = 'color: {green};'>gradeHat</span>"), 
                                error = glue::glue("<span style = 'color: {red};'>error</span>"))) +
  scale_fill_manual(values = c(SS = redblood), labels = c(SS = glue::glue("<span style = 'color: #C0000066; '>SS</span>"))) +
  guides(color = guide_legend(order = 1, override.aes = list(shape = c(16, 16, NA), linetype = c("blank", "dashed", "solid")))) +
  scale_y_continuous(breaks = 0:20, limits = c(0, 20)) +
  coord_fixed(.15) +
  theme_classic() +
  theme(legend.position = "bottom", 
        legend.spacing = unit(0, "pt"), 
        legend.margin = margin(r = 0, l = 0),
        legend.text = ggtext::element_markdown()) +
  labs(color = NULL, fill = NULL)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将自定义数字添加到ggplot图例

来自分类Dev

R ggplot2:将自定义文本添加到图例和热图侧面的值计数

来自分类Dev

将自定义图例添加到bokeh Bar

来自分类Dev

将自定义图例添加到fourfold()

来自分类Dev

将自定义ggplot图例添加到虚线和置信带中

来自分类Dev

将自定义CSS类添加到WFFM表单部分的图例元素

来自分类Dev

使用R和ggplot2语法将自定义工具提示添加到绘图中

来自分类Dev

使用scale _..._ manual将自定义图例添加到具有两个geom_point图层的ggplot中

来自分类常见问题

将自定义图像添加到geom_polygon中,填写ggplot

来自分类Dev

将自定义标头添加到“请求”

来自分类Dev

Hibernate将自定义前缀添加到目录

来自分类Dev

将自定义函数添加到类

来自分类Dev

将自定义类添加到引导按钮

来自分类Dev

将自定义键绑定添加到XCode

来自分类Dev

无法将自定义字体添加到Xcode

来自分类Dev

将自定义属性添加到Serilog

来自分类Dev

pyqt:将自定义列添加到QFileSystemModel

来自分类Dev

将自定义视图添加到警报视图

来自分类Dev

将自定义别名添加到.zshrc

来自分类Dev

将自定义标签添加到TIFF文件

来自分类Dev

将自定义代码段添加到emmet

来自分类Dev

将自定义Gradle插件添加到项目

来自分类Dev

将自定义属性添加到SimpleSAMLPhp

来自分类Dev

将自定义字段添加到Django admin

来自分类Dev

将自定义消息添加到TestNG失败

来自分类Dev

将自定义字体添加到GUI SWT

来自分类Dev

将自定义路线添加到Apigility

来自分类Dev

将自定义月份按钮添加到FullCalendar

来自分类Dev

将自定义Js添加到Wordpress主题