2012-05-01 19 views
10

Jak zmienić symbol klucza legendy geom_text? W poniższym przykładzie chciałbym zmienić symbol w legendzie z małych liter "a" na, na przykład, na wielkie litery "N". Przyjrzałem się przykładowi wykonania something similar here, ale nie udało mi się przekonać do działania tego przykładu.Zmiana symbolu w legendzie w 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

Niestety nie istnieje żaden oficjalny sposób. Szybki hack to: 'grid.gedit ("^key - [- 0-9] + $ ", label =" N ")' – kohske

+0

Dziękuję bardzo. To działa jak urok. –

+0

Albo Ty, albo @kohske powinniście to opublikować jako odpowiedź, abyś mógł ją zaakceptować, wskazując, że rozwiązał twój problem. – joran

Odpowiedz

3

Z gtable wersji 0.2.0 (ggplot2 v 2.1.0) zainstalowane, oryginalne rozwiązanie Kohske (patrz komentarze) może być wykonane do pracy.

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

Albo do pracy na obiekcie 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) 

Inną opcją

Modyfikacja 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: Aktualizacja do wersji 0.9.2 ggplot

Oryginalny odpowiedzi (patrz poniżej) wybuchł na temat wersji 0.9.0 lub wersji 0.9.1. Następujące prace w 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 

odpowiedzi Original Odpowiadając na moje własne pytanie i za pomocą fragmentu kodu w komentarzu użytkownika @ kohske powyżej:

# 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

Powiązane problemy