Me gustaría reproducir la trama inmediatamente debajo usando ggplot2. Puedo acercarme, pero no puedo eliminar los bordes superior y derecho. A continuación, presento varios intentos de uso de ggplot2, incluidas varias sugerencias que se encuentran en o a través de Stackoverflow. Desafortunadamente, no he podido hacer que esas sugerencias funcionen.
Espero que alguien pueda corregir uno o más de los siguientes fragmentos de código.
Gracias por cualquier sugerencia.
# 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())
Respuestas:
EDITAR Ignore esta respuesta. Ahora hay mejores respuestas. Vea los comentarios. Utilizar
+ theme_classic()
EDITAR
Esta es una mejor versión. El error mencionado a continuación en la publicación original permanece (creo). Pero la línea del eje se dibuja debajo del panel. Por lo tanto, elimine tanto el
panel.border
comopanel.background
para ver las líneas del eje.Publicación original Esto se acerca. Hubo un error al
axis.line
no funcionar en el eje y ( ver aquí ), que parece no estar corregido todavía. Por lo tanto, después de quitar el borde del panel, el eje y debe dibujarse por separado usandogeom_vline
.Los puntos extremos están recortados, pero el recorte se puede deshacer usando el código de baptiste .
O utilice
limits
para mover los límites del panel.fuente
Las actualizaciones recientes de ggplot (0.9.2+) han revisado la sintaxis de los temas. En particular,
opts()
ahora está en desuso, después de haber sido reemplazado portheme()
. La respuesta de Sandy seguirá generando un gráfico (a partir de enero de 2012), pero hace que R lance un montón de advertencias.Aquí está el código actualizado que refleja la sintaxis actual de ggplot:
genera:
fuente
Una alternativa
theme_classic()
es el tema que viene con el paquete cowplottheme_cowplot()
(cargado automáticamente con el paquete). Se parece atheme_classic()
, con algunas diferencias sutiles. Lo más importante es que los tamaños de etiqueta predeterminados son más grandes, por lo que las cifras resultantes se pueden usar en publicaciones sin necesidad de realizar más modificaciones (en particular si las guarda con ensave_plot()
lugar deggsave()
). Además, el fondo es transparente, no blanco, lo que puede resultar útil si desea editar la figura en Illustrator. Finalmente, las parcelas facetadas se ven mejor, en mi opinión.Ejemplo:
Así es como se ve el archivo
plot.png
producido por este código:Descargo de responsabilidad: soy el autor del paquete.
fuente
Seguí la respuesta de Andrew , pero también tuve que seguir https://stackoverflow.com/a/35833548 y configurar los ejes xey por separado debido a un error en mi versión de ggplot (v2.1.0).
En vez de
solía
fuente
Las opciones anteriores no funcionan para mapas creados con
sf
ygeom_sf()
. Por lo tanto, quiero agregar elndiscr
parámetro relevante aquí. Esto creará un mapa limpio y agradable que muestra solo las características.fuente
La simplificación de la respuesta de Andrew anterior conduce a este tema clave para generar la mitad del borde.
fuente
Aquí hay una respuesta extremadamente simple.
Es fácil. Fuente: final de este artículo
fuente