ggplot2: форматирование категорий легенды

Я хотел бы иметь возможность сделать что-то вроде этого: /questions/351612/dinamicheskoe-formatirovanie-metok-otdelnyih-osej-v-ggplot2/351619#351619, за исключением с "legend.text" вместо "axis.text.x". Это возможно?

Было бы что-то вроде этого, за исключением того, что в настоящее время он не работает (все labs выделены курсивом):

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")))

1 ответ

Решение

Вместо того, чтобы возиться с темой, вы можете настроить шкалы для рисования выражений, которые могут включать слова, выделенные курсивом. Например

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)

введите описание изображения здесь

Другие вопросы по тегам