繁体   English   中英

删除并编辑双图例文字ggplot2

[英]Remove and edit double legend text ggplot2

我有以下数据:

metric_list <- c(0.6, 0.2, 0.1, 0.05)
terms_used = c("a", "b", "c", "d")

并且我正在使用以下代码来获取图表:

df <- data.frame(x = 1:length(metric_list),
                         terms_used = terms_used, 
                         metric_list = 100*metric_list, 
                         cumulative = cumsum(100*metric_list))
gplot <- ggplot(data = df, aes(x = x)) +
            geom_point(aes(y = metric_list,
                           color = "ERR"), 
                       size = 3) +
            geom_text(aes(y = metric_list,
                          label = terms_used), 
                      size = 6, 
                      hjust = -1, 
                      vjust = 0) +
            geom_line(aes(y = cumulative,
                          color = "ESR",
                          linetype = "ESR"),
                      size = 1) +
            geom_point(aes(y = cumulative,
                           color = "ESR",
                           shape = "ESR"),
                       size = 3) +
            scale_colour_manual(name = "Legend",
                                values = c("ERR" = "blue", "ESR" = "red")) +
            scale_linetype_manual(name = "Legend",
                                  values = c("ERR" = 0, "ESR" = "dashed")) +
            scale_shape_manual(name = "Legend",
                               values = c("ERR" = 1, "ESR" = 0))

我得到的是以下内容: ggplot2图

我想知道如何修改图例,以便仅出现一个蓝点(用于ERR)和带空心正方形的红线(用于ESR)。 任何帮助是极大的赞赏。

当数据采用长格式而非宽格式时,ggplot2效果最佳。 (请参阅ggplot2的创建者Hadley Wickham的Tidy Data 演示文稿论文 。)

> df
  x terms_used metric_list cumulative
1 1          a          60         60
2 2          b          20         80
3 3          c          10         90
4 4          d           5         95

你应该使用

> DF
  x terms_used var_name val
1 1          a      ERR  60
2 2          b      ERR  20
3 3          c      ERR  10
4 4          d      ERR   5
5 1                 ESR  60
6 2                 ESR  80
7 3                 ESR  90
8 4                 ESR  95

tidyr软件包可用于重塑数据:

library(tidyr) # for gather
library(plyr)  # for revalue
# Reshape from wide to long
DF <- gather(df, var_name, val, c(metric_list, cumulative))
# change levels of factor (e.g. metric_list to ERR)
DF$var_name <- revalue(DF$var_name,
                       c("metric_list"="ERR", "cumulative"="ESR"))

然后,您可以创建如下图:

# Remove letters beside red points on plot
DF$terms_used <- as.character(DF$terms_used)
DF$terms_used[DF$var_name=="ESR"] <- ""

gplot <- ggplot(data = DF,
                aes(x=x, y=val, group=var_name, colour=var_name,
                    linetype=var_name, shape=var_name)) +
  geom_point() +
  geom_text(aes(label=terms_used),
            size = 6, 
            hjust = -1, 
            vjust = 0,
            show_guide = FALSE) +
  geom_line(size = 1) +
  geom_point(size = 3) +
  scale_colour_manual(values = c("blue", "red")) +
  scale_linetype_manual(values = c("blank", "dashed")) +
  scale_shape_manual(values = c(1,0))
gplot

ggplot2图

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM