Eu gostaria de reproduzir o gráfico imediatamente abaixo usando ggplot2. Posso chegar perto, mas não consigo remover as bordas superior e direita. A seguir, apresento várias tentativas de usar ggplot2, incluindo várias sugestões encontradas no ou por meio do Stackoverflow. Infelizmente, não consegui fazer com que essas sugestões funcionassem.
Espero que alguém consiga corrigir um ou mais dos trechos de código abaixo.
Obrigado por qualquer sugestão.
# desired plot
a <- seq(1,20)
b <- a^0.25
plot(a,b, bty = "l")
library(ggplot2)
df <- as.data.frame(cbind(a,b))
# 1. ggplot2 default
ggplot(df, aes(x = a, y = b)) + geom_point()
# 2. removes background color
ggplot(df, aes(x = a, y = b)) + geom_point() + opts(panel.background = theme_rect(fill='white', colour='black'))
# 3. also removes gridlines
none <- theme_blank()
ggplot(df, aes(x = a, y = b)) + geom_point() + opts(panel.background = theme_rect(fill='white', colour='black')) + opts(panel.grid.major = none, panel.grid.minor = none)
# 4. does not remove top and right border
ggplot(df, aes(x = a, y = b)) + geom_point() + opts(panel.background = theme_rect(fill='white', colour='black')) + opts(panel.grid.major = none, panel.grid.minor = none) + opts(panel.border = none)
# 5. does not remove top and right border
ggplot(df, aes(x = a, y = b)) + geom_point() + opts(panel.background = theme_rect(fill='white', colour='black')) + opts(panel.grid.major = none, panel.grid.minor = none) + opts(axis.line = theme_segment())
# 6. removes x and y axis in addition to top and right border
# http://stackoverflow.com/questions/5458409/remove-top-and-right-border-from-ggplot2
ggplot(df, aes(x = a, y = b)) + geom_point() + opts(panel.background = theme_rect(fill='white', colour='black')) + opts(panel.grid.major = none, panel.grid.minor = none) + opts(panel.background=theme_rect(colour=NA))
# 7. returns error when attempting to remove top and right border
# https://groups.google.com/group/ggplot2/browse_thread/thread/f998d113638bf251
#
# Error in el(...) : could not find function "polylineGrob"
#
theme_L_border <- function(colour = "black", size = 1, linetype = 1) {
structure(
function(x = 0, y = 0, width = 1, height = 1, ...) {
polylineGrob(
x=c(x+width, x, x), y=c(y,y,y+height), ..., default.units = "npc",
gp=gpar(lwd=size, col=colour, lty=linetype),
)
},
class = "theme",
type = "box",
call = match.call()
)
}
ggplot(df, aes(x = a, y = b)) + geom_point() + opts(panel.background = theme_rect(fill='white', colour='black')) + opts(panel.grid.major = none, panel.grid.minor = none) + opts( panel.border = theme_L_border())
Respostas:
EDIT Ignore esta resposta. Agora existem respostas melhores. Veja os comentários. Usar
+ theme_classic()
EDITAR
Esta é uma versão melhor. O bug mencionado abaixo na postagem original permanece (eu acho). Mas a linha do eixo é desenhada sob o painel. Portanto, remova
panel.border
epanel.background
para ver as linhas do eixo.Postagem original Isso chega perto. Havia um bug com o
axis.line
não funcionamento do eixo y ( veja aqui ), que parece não ter sido corrigido ainda. Portanto, após remover a borda do painel, o eixo y deve ser desenhado separadamente usandogeom_vline
.Os pontos extremos são recortados, mas o recorte pode ser desfeito usando o código de baptiste .
Ou use
limits
para mover os limites do painel.fonte
As atualizações recentes do ggplot (0.9.2+) revisaram a sintaxe dos temas. Mais notavelmente,
opts()
agora está obsoleto, tendo sido substituído portheme()
. A resposta de Sandy ainda (a partir de janeiro de 12) gerará um gráfico, mas fará com que R lance um monte de avisos.Este é o código atualizado que reflete a sintaxe atual do ggplot:
gera:
fonte
Uma alternativa ao
theme_classic()
é o tema que vem com o pacote cowplot ,theme_cowplot()
(carregado automaticamente com o pacote). É semelhante atheme_classic()
, com algumas diferenças sutis. Mais importante ainda, os tamanhos de etiqueta padrão são maiores, de modo que os números resultantes podem ser usados em publicações sem a necessidade de modificações adicionais (em particular se você salvá-los com emsave_plot()
vez deggsave()
). Além disso, o fundo é transparente, não branco, o que pode ser útil se você quiser editar a figura no ilustrador. Finalmente, os gráficos facetados parecem melhores, em minha opinião.Exemplo:
Esta é a
plot.png
aparência do arquivo produzido por este código:Isenção de responsabilidade: eu sou o autor do pacote.
fonte
Segui a resposta de Andrew , mas também tive que seguir https://stackoverflow.com/a/35833548 e definir os eixos xey separadamente devido a um bug em minha versão do ggplot (v2.1.0).
Ao invés de
eu usei
fonte
As opções acima não funcionam para mapas criados com
sf
egeom_sf()
. Portanto, quero adicionar ondiscr
parâmetro relevante aqui. Isso criará um bom mapa limpo mostrando apenas os recursos.fonte
A simplificação da resposta de Andrew acima leva a esse tema-chave para gerar a meia borda.
fonte
Aqui está uma resposta extremamente simples
É tão fácil. Fonte: final deste artigo
fonte