2013-07-16 16 views
6

Korzystam z poniższego kodu, aby utworzyć mapę z punktami proporcjonalnymi do charakterystyki wyjściowej (Total), ale chciałbym zmienić szerokość znacznika.Zmiana grubości znacznika w ggplot2

p <- ggplot() 
p <- p + geom_polygon(data=all_states, aes(x=LONG*-1, y=LAT, group = ID),colour="black",    fill="white") 
p <- p + geom_point(data=mydata, aes(x=long*-1, y=lat, size = Total),color="mediumblue",  shape=1) + 
scale_size(range = c(1,11), name="Sells Volume")+ 
labs(title="Reglone SL")+ 
xlab(" ")+ 
ylab(" ") 
p 
+0

Powinieneś [dokonać powtarzalne Przykład] (http://stackoverflow.com/questions/5963269/ how-to-make-a-great-r-odtwarzalny-przykład). – agstudy

+0

Zgadzam się z agstudy. Podaj także nieco więcej opisu tego, co masz na myśli ... masz na myśli znacznik wyprodukowany przez 'geom_point'? Skalujesz je już zmienną "Total", więc czy chcesz je wszystkie większe? Czy chcesz, aby różniły się rozmiarem? – Justin

Odpowiedz

16

Czy jest to grubość granicy pustego punktu, który chcesz zmienić? Można to zrobić za pomocą grid.edit z pakietu grid.

library(ggplot2) 
library(grid) 

ggplot(data = data.frame(x = 1:10, y = 1:10), aes(x=x, y=y)) + 
    geom_point(size = 10, shape = 1) 

grid.force() # To make the grobs visible to grid editing tools 

grid.edit("geom_point.points", grep = TRUE, gp = gpar(lwd = seq(1, 5.5, .5))) 

enter image description here

EDIT Aby uzyskać klucz legendy dopasować punkty

library(ggplot2) 
library(grid) 
library(gtable) 

p = ggplot(data = data.frame(x = 1:10, y = 1:10, c = c(rep("a", 5), rep("b", 5))), 
    aes(x=x, y=y, colour = c)) + 
    geom_point(shape = 1, size = 10) 

lwd = 8 # Set line width 

g = ggplotGrob(p); dev.off() # Get the plot grob 

# Get the indices for the legend: t = top, r = right, ... 
indices <- c(subset(g$layout, name == "guide-box", select = t:r)) 

# Get the row number of the legend in the layout 
rn <- which(g$layout$name == "guide-box") 

# Extract the legend 
legend <- g$grobs[[rn]] 

# Get the legend keys 
pointGrobs = which(grepl("points", legend$grobs[[1]]$grobs)) 

# Check them out - no line width set 
# for (i in pointGrobs) str(legend$grobs[[1]]$grobs[[i]]) 

# Set line width 
for (i in pointGrobs) legend$grobs[[1]]$grobs[[i]]$gp$lwd = lwd 

# Check them out - line width set 
# for (i in pointGrobs) str(legend$grobs[[1]]$grobs[[i]]) 

# Put the modified legend back into the plot grob 
g = gtable_add_grob(g, legend, t=indices$t, l=indices$l) 

# g$grobs[[4]]$children[[2]]$gp$lwd = lwd # Alternative for setting lwd for points in the plot 

grid.newpage() 
grid.draw(g) 

grid.force() # To make the grobs visible to grid editing tools 

grid.edit("geom_point.points", grep = TRUE, gp = gpar(lwd = lwd)) 
+1

'grid.edit' jest w pakiecie' grid' – baptiste

+2

alternatywą dla ggplot2 jest nakładanie się dwóch warstw: jedna z wypełnionymi punktami o rosnącej średnicy i jedna na górze z mniejszymi punktami i szarym wypełnieniem. – baptiste

+0

Zmienia to tylko grubość punktów, a nie rozmiar w legendzie. Jak mogę zwiększyć to drugie, aby pasowało do pierwszego? – wdkrnls

Powiązane problemy