ggplot2:格式化图例类别 [英] ggplot2: Formatting Legend Categories

查看:93
本文介绍了ggplot2:格式化图例类别的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我希望能够执行以下操作: https://stackoverflow.com/a/30036603 ,除了使用"legend.text"而不是"axis.text.x".这可能吗?

I would like to be able to do something like this: https://stackoverflow.com/a/30036603, except with "legend.text" instead of "axis.text.x". Is this possible?

除了当前无法正常工作(所有labs均以斜体显示)之外,可能会是这样:

It would be something like this, except it's not currently working (all labs are italicized):

data <- data.frame(labs = c("Oranges", "Apples", "Cucumbers"), counts = c(5, 10, 12))

ggplot(data = data) +
geom_bar(aes(x = labs, y = counts,fill=labs), stat="identity") +
theme(axis.text.x=element_text(face=ifelse(levels(data$labs)=="Cucumbers","plain","italic"))) +
  theme(legend.text=element_text(face=ifelse(levels(data$labs)=="Cucumbers","plain","italic")))

推荐答案

您可以调整比例以绘制包含斜体字的表达式,而不用弄乱主题.例如

Rather than messing with the theme, you can adjust the scales to draw expressions which can include italic words. For example

toexpr<-function(x) {
  getfun <- function(x) {
    ifelse(x=="Cucumbers", "plain", "italic")
  }
  as.expression(unname(Map(function(f,v) substitute(f(v), list(f=as.name(f), v=as.character(v))), getfun(x), x)))
}

ggplot(data = data) +
  geom_bar(aes(x = labs, y = counts,fill=labs), stat="identity") +
  scale_x_discrete(breaks =levels(data$labs), labels = toexpr(levels(data$labs))) +
  scale_fill_discrete(breaks=levels(data$labs), labels = toexpr(levels(data$labs))) + 
  theme(legend.text.align = 0)

这篇关于ggplot2:格式化图例类别的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆