2012-05-01 42 views
10

¿Cómo cambio el símbolo de la clave de leyenda geom_text? En el siguiente ejemplo, me gustaría cambiar el símbolo en la clave de la leyenda de una minúscula "a" a, por ejemplo, una mayúscula "N". He visto un ejemplo para hacer something similar here, pero no pude hacer que ese ejemplo funcione.Cambiar el símbolo en la clave de leyenda en ggplot2

# 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

+5

Desafortunadamente no hay manera oficial. Un truco rápido es: 'grid.gedit ("^key - [- 0-9] + $ ", label =" N ")' – kohske

+0

Muchas gracias. Funciona a las mil maravillas. –

+0

O bien usted o @kohske deben publicar eso como respuesta, para que pueda aceptarlo e indicar que resolvió su problema. – joran

Respuesta

3

Con la versión gtable 0.2.0 (ggplot2 v 2.1.0) instalado, se puede hacer que la solución original de Kohske (ver los comentarios) funcione.

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

O, para trabajar en un objeto 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) 

Otra opción

Modificar la geom

# 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 
9

EDIT: la actualización de la versión 0.9.2 ggplot

La respuesta original (véase más adelante) se rompió en sobre la versión 0.9.0 o 0.9.1. Las siguientes obras en 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 

Respuesta original responder a mi propia pregunta y utilizando el fragmento de código en el comentario de @ kohske arriba:

# 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

Cuestiones relacionadas