R 中 Lollipop 图表的 Hack Legend Key

Hack Legend Key for Lollipop Chart in R

我想用 ggplot2

中另一列的元素替换一列的元素
library(tidyverse)

df1 <- read.table(text =
                    "nbb_RMSE  9 0.2402482
                     mbb_RMSE  9 0.1023012
                     cbb_RMSE  8 0.2031448
                     tmbb_RMSE 4 0.2654746
                     tcbb_RMSE 9 0.4048711")

colnames(df1) <- c("Methods", "lb", "RMSE")

df1 |>
  mutate(colour = fct_reorder(Methods, RMSE)) |>
  ggplot(aes(Methods, RMSE, colour = colour)) + 
  geom_point(size = 4) + 
  geom_segment(aes(Methods, xend = Methods, yend = RMSE, y = 0)) + 
  scale_color_manual(values = c("green", "yellowgreen", "yellow", "orange", "red")) + 
  theme_bw()

我想要的

lb列应该这样排列:Green表示最小RMSE对应lb列中的9,yellowgreen表示RMSE 中的嵌套高值对应于 lb 列中的 8,yellow 表示 RMSE 中的嵌套高值对应于 lb 列中的 9,orange表示RMSE中的嵌套高值对应lb列中的4,red表示RMSE中的嵌套高值对应[=]中的9 12=]列。

我希望图例上的标签 color 更改为数据框中名为 lb 的列的名称。

这里是

您可以在 scale_color_manual

中使用 namelabels 参数
df1 |>
  mutate(colour = fct_reorder(Methods, RMSE)) |>
  ggplot(aes(Methods, RMSE, colour = colour)) + 
  geom_point(size = 4) + 
  geom_segment(aes(Methods, xend = Methods, yend = RMSE, y = 0)) + 
  scale_color_manual(values = c("green", "yellowgreen", "yellow", 
                                "orange", "red"),
                     labels = c(9, 8, 9, 9, 4), name = "lb") + 
  theme_bw(base_size = 16)