Chciałbym odtworzyć fabułę bezpośrednio poniżej, używając ggplot2. Mogę podejść blisko, ale nie mogę usunąć górnej i prawej krawędzi. Poniżej przedstawiam kilka prób użycia ggplot2, w tym kilka sugestii znalezionych na lub za pośrednictwem Stackoverflow. Niestety nie udało mi się zmusić tych sugestii do działania.
Mam nadzieję, że ktoś może poprawić jeden lub więcej poniższych fragmentów kodu.
Dziękuję za wszelkie sugestie.
# 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())
Odpowiedzi:
EDYCJA Zignoruj tę odpowiedź. Są teraz lepsze odpowiedzi. Zobacz komentarze. Posługiwać się
+ theme_classic()
EDYTOWAĆ
To jest lepsza wersja. Błąd wspomniany poniżej w oryginalnym poście pozostaje (tak mi się wydaje). Ale linia osi jest rysowana pod panelem. Dlatego usuń oba
panel.border
i,panel.background
aby zobaczyć linie osi.Oryginalny post To się zbliża. Wystąpił błąd z
axis.line
niedziałającą osią Y ( patrz tutaj ), który wydaje się nie zostać jeszcze naprawiony. Dlatego po usunięciu obrzeża panelu oś Y należy narysować osobno za pomocągeom_vline
.Skrajne punkty są obcinane, ale przycinanie można cofnąć za pomocą kodu utworzonego przez baptiste .
Lub użyj,
limits
aby przesunąć granice panelu.źródło
Ostatnie aktualizacje ggplot (0.9.2+) zmieniły składnię motywów. Przede wszystkim
opts()
jest teraz przestarzały i został zastąpiony przeztheme()
. Odpowiedź Sandy'ego nadal (od stycznia '12) generuje wykres, ale powoduje, że R rzuca kilka ostrzeżeń.Oto zaktualizowany kod odzwierciedlający aktualną składnię ggplot:
generuje:
źródło
Alternatywą
theme_classic()
jest motyw dostarczany z pakietem cowplottheme_cowplot()
(ładowany automatycznie wraz z pakietem). Wygląda podobnietheme_classic()
, z kilkoma subtelnymi różnicami. Co najważniejsze, domyślne rozmiary etykiet są większe, więc otrzymane liczby można wykorzystać w publikacjach bez konieczności dalszych modyfikacji (w szczególności, jeśli zapisujesz je zsave_plot()
zamiastggsave()
). Ponadto tło jest przezroczyste, a nie białe, co może być przydatne, jeśli chcesz edytować figurę w programie Illustrator. W końcu, moim zdaniem, działki fasetowe wyglądają lepiej.Przykład:
Tak wygląda plik
plot.png
utworzony przez ten kod:Zastrzeżenie: jestem autorem pakietu.
źródło
Poszedłem za odpowiedź Andrzeja , ale miałem również śledzić https://stackoverflow.com/a/35833548 i ustawienie osi X i Y oddzielnie ze względu na błąd w mojej wersji ggplot (v2.1.0).
Zamiast
użyłem
źródło
Powyższe opcje nie działają w przypadku map utworzonych za pomocą
sf
igeom_sf()
. Dlatego chcę tutaj dodać odpowiednindiscr
parametr. Stworzy to ładną, czystą mapę pokazującą tylko funkcje.źródło
Uproszczenie z powyższej odpowiedzi Andrzeja prowadzi do tego kluczowego tematu do wygenerowania półkrawędzi.
źródło
Oto niezwykle prosta odpowiedź
To jest takie proste. Źródło: koniec tego artykułu
źródło