Ao usar ggplot, posso definir a shape
como 21-25 para obter formas que tenham configuração independente para as colors internas ( fill
) e bordas ( col
), assim:
df <- data.frame(id=runif(12), x=1:12, y=runif(12)) ggplot(df, aes(x=x, y=y)) + geom_point(aes(fill=id, size=id), colour="black", shape=21)
No entanto, não consigo descobrir como controlar a espessura das bordas da forma, definindo-as com absoluta precisão ou como um mapeamento estético. Observo que, se eu definir um valor lwd
, ele substitui o size
estético:
ggplot(df, aes(x=x, y=y)) + geom_point(aes(fill=id, size=id), colour="black", shape=21, lwd=2)
Como faço para controlar a espessura da borda?
A partir da versão 2.0.0 do ggplot2 , há um argumento para controlar a espessura da borda do ponto. Do arquivo NEWS.md
:
geom_point () ganha uma estética de traço que controla a largura da borda das formas 21-25 (# 1133, @SeySayux). o tamanho e o curso são aditivos, portanto, um ponto com tamanho = 5 e curso = 5 terá um diâmetro de 10 mm. (# 1142)
Assim, a solução correta para isso é agora:
df <- data.frame(id=runif(12), x=1:12, y=runif(12)) ggplot(df, aes(x=x, y=y)) + geom_point(aes(fill=id, size=id), colour="black", shape=21, stroke = 2)
Parece um pouco hacky, mas você pode adicionar um conjunto ” background ” de pontos com o tamanho definido para o mapeamento estético, além de uma pequena constante para ampliar a borda dos pontos. Jogue com a constante para obter a largura da borda desejada.
Você também terá que desabilitar a legenda do tamanho para pará-lo exibindo a legenda no gráfico …
ggplot(df, aes(x=x, y=y)) + geom_point(aes(size=id+0.5), colour="black" , show_guide = FALSE )+ scale_size( guide = "none" )+ geom_point(aes(fill=id, size=id), colour="black", shape=21)
Outra solução é criar o gráfico em R e exportá-lo para um arquivo .svg. A largura de linha pode ser alterada usando o software de edição de charts vetoriais (por exemplo, Inkscape). Esse método é particularmente útil quando os pontos de dados se sobrepõem.