2012-05-01 38 views
10

Làm cách nào để thay đổi biểu tượng chìa khóa chú giải geom_text? Trong ví dụ bên dưới, tôi muốn thay đổi biểu tượng trong khóa chú giải từ chữ thường "a" thành chữ "N". Tôi đã xem xét một ví dụ để thực hiện something similar here, nhưng không thể lấy ví dụ đó để hoạt động.Thay đổi biểu tượng trong khóa chú giải trong 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

Đáng tiếc là không có cách nào chính thức. Một hack nhanh là: 'grid.gedit ("^key - [- 0-9] + $ ", label =" N ")' – kohske

+0

Cảm ơn bạn rất nhiều. Nó hoạt động như một say mê. –

+0

Hoặc bạn hoặc @kohske nên đăng câu trả lời đó để bạn có thể chấp nhận câu trả lời, cho biết rằng nó đã giải quyết được sự cố của bạn. – joran

Trả lời

3

Với phiên bản gtable 0.2.0 (ggplot2 v 2.1.0) được cài đặt, giải pháp ban đầu của Kohske (xem bình luận) có thể được thực hiện để hoạt động.

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

Hoặc, để làm việc trên một đối tượng 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) 

Một lựa chọn khác

Sửa đổi 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: cập nhật cho phiên bản 0.9.2 ggplot

Câu trả lời gốc (xem dưới đây) đã phá vỡ khoảng phiên bản 0.9.0 hoặc 0.9.1. Các công trình sau đây trong 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 câu trả lời Trả lời câu hỏi của riêng tôi và sử dụng các đoạn mã trong bình luận @ kohske của trê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) 

# 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

Các vấn đề liên quan