Ich möchte den Plot direkt darunter mit ggplot2 reproduzieren. Ich kann nahe kommen, aber den oberen und rechten Rand nicht entfernen. Im Folgenden stelle ich einige Versuche mit ggplot2 vor, einschließlich einiger Vorschläge, die auf oder über Stackoverflow gefunden wurden. Leider konnte ich diese Vorschläge nicht zum Laufen bringen.
Ich hoffe, dass jemand in der Lage ist, einen oder mehrere der folgenden Codefragmente zu korrigieren.
Vielen Dank für Anregungen.
# 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())
Antworten:
BEARBEITEN Ignorieren Sie diese Antwort. Es gibt jetzt bessere Antworten. Siehe die Kommentare. Verwenden
+ theme_classic()
BEARBEITEN
Dies ist eine bessere Version. Der unten im ursprünglichen Beitrag erwähnte Fehler bleibt bestehen (glaube ich). Die Achsenlinie wird jedoch unter dem Bedienfeld gezeichnet. Entfernen Sie daher sowohl die
panel.border
als auchpanel.background
, um die Achsenlinien anzuzeigen.Originaler Beitrag Dies kommt näher. Es gab einen Fehler, bei dem
axis.line
auf der y-Achse nicht gearbeitet wurde ( siehe hier ), der noch nicht behoben zu sein scheint. Daher muss nach dem Entfernen des Bedienfeldrandes die y-Achse separat mit gezeichnet werdengeom_vline
.Die Extrempunkte werden abgeschnitten, aber das Ausschneiden kann mithilfe des Codes von baptiste rückgängig gemacht werden .
Oder verwenden Sie
limits
, um die Grenzen des Bedienfelds zu verschieben.quelle
Die jüngsten Aktualisierungen von ggplot (0.9.2+) haben die Syntax für Themen überarbeitet. Vor allem
opts()
ist jetzt veraltet, ersetzt durchtheme()
. Sandys Antwort generiert immer noch (Stand: 12. Januar) ein Diagramm, veranlasst R jedoch, eine Reihe von Warnungen auszulösen.Hier ist aktualisierter Code, der die aktuelle ggplot-Syntax widerspiegelt:
erzeugt:
quelle
Eine Alternative zu
theme_classic()
ist das Thema, das mit dem Cowplot- Paket geliefert wirdtheme_cowplot()
(wird automatisch mit dem Paket geladen). Es sieht ähnlich austheme_classic()
, mit ein paar subtilen Unterschieden. Am wichtigsten ist, dass die Standardetikettengrößen größer sind, sodass die resultierenden Zahlen in Veröffentlichungen verwendet werden können, ohne dass weitere Änderungen erforderlich sind (insbesondere, wenn Sie sie mitsave_plot()
statt speichernggsave()
). Außerdem ist der Hintergrund transparent und nicht weiß. Dies kann hilfreich sein, wenn Sie die Abbildung im Illustrator bearbeiten möchten. Schließlich sehen facettierte Handlungen meiner Meinung nach besser aus.Beispiel:
So
plot.png
sieht die von diesem Code erzeugte Datei aus:Haftungsausschluss: Ich bin der Autor des Pakets.
quelle
Ich folgte Andrews Antwort , musste aber auch https://stackoverflow.com/a/35833548 folgen und die x- und y-Achse aufgrund eines Fehlers in meiner Version von ggplot (v2.1.0) getrennt einstellen.
Anstatt
ich benutzte
quelle
Die oben genannten Optionen funktionieren nicht für Karten, die mit
sf
und erstellt wurdengeom_sf()
. Daher möchte ichndiscr
hier den relevanten Parameter hinzufügen . Dadurch wird eine schöne, saubere Karte erstellt, die nur die Funktionen zeigt.quelle
Die Vereinfachung der obigen Antwort von Andrew führt zu diesem Schlüsselthema, um die halbe Grenze zu erzeugen.
quelle
Hier ist eine sehr einfache Antwort
So einfach ist das. Quelle: das Ende dieses Artikels
quelle