Setzen Sie par beim Start auf die Standardwerte zurück

76

Normalerweise erstelle ich ein Konstrukt, wenn ich meine eigenen Plotfunktionen erstelle:

op <- par("mypar"=myvalue)
on.exit(par(op))

Dies ist die Standardmethode zum Zurücksetzen parder vorherigen Werte. Stellen Sie sich vor, Sie haben einige Funktionen ausgeführt, die einige der Pars geändert haben, und müssen beim Start in R auf die Standardwerte zurückgesetzt werden. Wie geht das bequem?

Oder mit anderen Worten: Wie erreicht man die Standardwerte für par()?

Joris Meys
quelle
5
Ich hatte den Eindruck, dass jedes Mal, wenn ein neues Grafikgerät gestartet wird, es ohnehin Standardwerte erhält.
James
3
@James Sie tun es, aber ich denke, der Kern von @Joris Q ist, dass es eine Möglichkeit gibt, die Pars für das aktuelle Gerät zurückzusetzen, wenn man die Standardeinstellungen nicht gespeichert hat. Mit anderen Worten, wie bestimmen wir die Standard-Pars für ein Gerät, nicht die aktuellen Pars.
Gavin Simpson
7
@ Gavin Simpson Ah ok, aber dev.new()und dev.off()könnte dann verwendet werden
James
1
@ James in der Tat; Ich habe dies @Joris im R-Tag-Chatroom gegenüber erwähnt, aber wir wollen eine weniger hackige Lösung :-)
Gavin Simpson

Antworten:

89

Jedes Mal, wenn ein neues Gerät geöffnet wird, wird par () zurückgesetzt. Eine weitere Option ist einfach tun dev.off()und fortfahren.

DarkHalo
quelle
5
Unter allen Antworten ist dies die einzige, die die gestellte Frage tatsächlich beantwortet.
Gented
5
@DarkHalo wäre dev.off () keine schlechte Option, wenn wir mehrere Plots in einem PDF hätten? weil dies das pdfGerät schließen würde und daher nicht in der Lage sein würde, mehrere Diagramme in einem einzigen PDF zu haben
joel.wilson
51

Das ist hacky, aber:

resetPar <- function() {
    dev.new()
    op <- par(no.readonly = TRUE)
    dev.off()
    op
}

funktioniert auf eine Art und Weise, aber es blinkt vorübergehend ein neues Gerät auf dem Bildschirm ...

Z.B:

> par(mfrow = c(2,2)) ## some random par change
> par("mfrow")
[1] 2 2
> par(resetPar())     ## reset the pars to defaults
> par("mfrow")        ## back to default
[1] 1 1
Gavin Simpson
quelle
3
Es könnte sicherer sein, den Versuch zu vermeiden, Elemente zurückzusetzen, die durch Ändern der Größe geändert wurden, wie z. B. mai, mar, pin, plt und pty (wie auf der
Hilfeseite angegeben
2
Eine ähnliche Idee wurde auf R-Hilfe diskutiert: tolstoy.newcastle.edu.au/R/e2/help/07/09/26665.html
Aaron verließ Stack Overflow
Ich habe nichts anderes gefunden, also muss ich es tun.
Joris Meys
1
Ich erhalte die folgende Fehlermeldung 'Warnmeldung: In (function (): Nur ein RStudio-Grafikgerät ist zulässig'
hlm
3
@hlm Tough dann; Es kann nur ein solches Gerät geben, und da R die Standardeinstellungen nicht speichert, gibt es jetzt eine Möglichkeit, sie zu erfassen. Fragen Sie die RStudio-Leute danach. Alternativ können Sie nicht ändern, par()ohne die Standardeinstellungen zu speichern. Oder sorgen Sie dafür, dass die Standardeinstellungen beim Start über Ihre Daten abgerufen werden .Rprofile.
Gavin Simpson
15

Von Quick-R

par()              # view current settings
opar <- par()      # make a copy of current settings
par(col.lab="red") # red x and y labels 
hist(mtcars$mpg)   # create a plot with these new settings 
par(opar)          # restore original settings
Anusha
quelle
13
Ich kenne das, aber es stellt die Standardwerte nicht wieder her, wenn Sie sie zuvor geändert haben. par () zeigt die aktuellen Einstellungen, nicht die Standardeinstellungen.
Joris Meys
4
Diese Lösung funktioniert in diesem Fall möglicherweise nicht, aber lassen wir sie hier als einen Ansatz, der nicht funktioniert.
Anusha
4

Eine alternative Lösung, um zu verhindern, dass Funktionen den Benutzer ändern par. Sie können die Standardparameter frühzeitig für die Funktion festlegen, damit die grafischen Parameter und das Layout während der Funktionsausführung nicht geändert werden. Siehe ?on.exitfür weitere Details.

on.exit(layout(1))
opar<-par(no.readonly=TRUE)
on.exit(par(opar),add=TRUE,after=FALSE)
Federico Giorgi
quelle
1

Verwenden Sie das folgende Skript, um zum normalen 1-Plot zurückzukehren:

par(mfrow = c(1,1))
Mahesh
quelle
1

dev.off () ist die beste Funktion, löscht aber auch alle Diagramme. Wenn Sie Diagramme in Ihrem Fenster behalten möchten, speichern Sie zu Beginn die Standard-Par-Einstellungen:

def.par = par ()

Wenn Sie dann Ihre Par-Funktionen verwenden, haben Sie immer noch eine Sicherungskopie der Standard-Par-Einstellungen. Später, nachdem Sie Diagramme erstellt haben, beenden Sie mit:

par (def.par) #Gehen Sie zu den Standard-Par-Einstellungen zurück

Damit behalten Sie generierte Plots bei und setzen die Par-Einstellungen zurück.

Natalia
quelle
2
Beachten Sie, dass einige der grafischen Parameter schreibgeschützt sind und daher nicht zurückgesetzt werden können. Daher erfolgt Ihr erster Pauschalanruf am parbesten als par(no.readonly = TRUE).
BroVic