Вопрос по ggplot2, r – Изменение символа в ключе легенды в ggplot2

11

Как изменить символ ключа легенды geom_text? В приведенном ниже примере я хотел бы изменить символ в ключе легенды из нижнего регистра "a" скажем, в верхнем регистре "N". Я посмотрел на пример для выполнениячто-то подобное здесь, но не смог заставить этот пример работать.

# Some toy data
df <- expand.grid(x = factor(seq(1:5)), y = factor(seq(1:5)), KEEP.OUT.ATTRS = FALSE)
df$Count = seq(1:25)

# An example plot
library(ggplot2)
ggplot(data = df, aes( x = x, y = y, label = Count, size = Count)) + 
   geom_text() +
   scale_size(range = c(2, 10))

enter image description here

Большое спасибо. Отлично работает. Sandy Muspratt
К сожалению нет официального пути. Быстрый взлом это:grid.gedit("^key-[-0-9]+$", label = "N") kohske
Либо вы, либо @kohske должны опубликовать это как ответ, чтобы вы могли принять его, указав, что это решило вашу проблему. joran

Ваш Ответ

2   ответа
9

EDIT: updating for ggplot version 0.9.2

Оригинальный ответ (см. Ниже) сломался примерно в версии 0.9.0 или 0.9.1. Следующие работы в 0.9.2

# Some toy data
df <- expand.grid(x = factor(seq(1:5)), y = factor(seq(1:5)), KEEP.OUT.ATTRS = FALSE)
df$Count = seq(1:25)

# A plot
library(ggplot2)
p = ggplot(data = df, aes( x = x, y = y, label = Count, size = Count)) + 
   geom_point(colour = NA) +
   geom_text(show.legend = FALSE) +  
   guides(size = guide_legend(override.aes = list(colour = "black", shape = utf8ToInt("N")))) +
   scale_size(range = c(2, 10))

p

Original answer Отвечая на мой собственный вопрос и используя фрагмент кода в комментарии @ kohske выше:

# Some toy data
df <- expand.grid(x = factor(seq(1:5)), y = factor(seq(1:5)), KEEP.OUT.ATTRS = FALSE)
df$Count = seq(1:25)

# A plot
library(ggplot2)
p = ggplot(data = df, aes( x = x, y = y, label = Count, size = Count)) + 
    geom_text() +
    scale_size(range = c(2, 10))
p

library(grid)
grid.gedit("^key-[-0-9]+$", label = "N")

enter image description here

3

gtable версия 0.2.0 (ggplot2 v 2.1.0), оригинальное решение Kohske (см. комментарии) можно заставить работать.

# Some toy data
df <- expand.grid(x = factor(seq(1:5)), y = factor(seq(1:5)), KEEP.OUT.ATTRS = FALSE)
df$Count = seq(1:25)

# Load packages
library(ggplot2)
library(grid)

# A plot
p = ggplot(data = df, aes( x = x, y = y, label = Count, size = Count)) + 
    geom_text() +
    scale_size(range = c(2, 10))
p

grid.ls(grid.force()) 
grid.gedit("key-[-0-9]-1-1", label = "N")

Или, чтобы работать на объекте grob:

# Get the ggplot grob
gp = ggplotGrob(p)
grid.ls(grid.force(gp)) 

# Edit the grob
gp = editGrob(grid.force(gp), gPath("key-[1-9]-1-1"), grep = TRUE, global = TRUE,  
         label = "N")

# Draw it
grid.newpage()
grid.draw(gp)

Another option

Изменить геом

# Some toy data
df <- expand.grid(x = factor(seq(1:5)), y = factor(seq(1:5)), KEEP.OUT.ATTRS = FALSE)
df$Count = seq(1:25)

# Load packages
library(ggplot2)
library(grid)

# A plot
p = ggplot(data = df, aes( x = x, y = y, label = Count, size = Count)) + 
    geom_text() +
    scale_size(range = c(2, 10))
p

GeomText$draw_key <- function (data, params, size) { 
   pointsGrob(0.5, 0.5, pch = "N", 
   gp = gpar(col = alpha(data$colour, data$alpha), 
   fontsize = data$size * .pt)) }

p

Похожие вопросы