Wie kann ich die Schriftgröße in einem Plot in R erhöhen?

146

Ich bin verwirrt. Was ist der richtige Weg, um die Schriftgröße von Text in Titel, Beschriftungen und anderen Stellen eines Plots zu erhöhen?

Beispielsweise

x <- rnorm(100)
hist(x, xlim=range(x), xlab= "Variable Label", 
     ylab="density", main="Title of plot", prob=TRUE, ps=30)

Das psArgument ändert die Schriftgröße nicht (in der R-Hilfe heißt es jedoch, ?pardass es sich um "die Punktgröße von Text (aber nicht um Symbole)" handelt.

Ist es auch möglich, das Ändern der Schriftgröße von der Plotfunktion zu trennen, z hist.

Tim
quelle
Mögliches Duplikat von So ändern Sie die Etikettengröße eines R-Diagramms
Waldir Leoncio

Antworten:

140

Sie möchten, dass so etwas wie das cex=1.5Argument Schriftarten zu 150 Prozent skaliert. Aber sehen Sie, help(par)wie es auch cex.labgibt cex.axis, ...

Dirk Eddelbuettel
quelle
1
Vielen Dank! Was ist der Unterschied zu "ps = 1,5"?
Tim
5
warum funktioniert cex = 1.5 nicht? Müssen Sie jedoch für jedes Teil cex.lab, cex.axis, cex.main angeben? Wofür ist cex = 1,5?
Tim
2
Lasen Sie help(par)etwa ps? Scheint, soweit ich das beurteilen kann, nicht textbezogen zu sein.
Dirk Eddelbuettel
2
So ist es, zum Teil sicherlich aus Gründen der Abwärtskompatibilität mit früheren Implementierungen der S-Sprache.
Dirk Eddelbuettel
3
cex ist der Vergrößerungsfaktor. Der Standardwert ist 1. Wenn Sie Schriftgrößen angeben müssen, sollten Sie besser darauf vorbereitet sein, in die Dokumentation einzusteigen, beginnend mit "Geräte", "pdfFonts", "pdf", "embeddedFonts" und vielen anderen.
IRTFM
124

Um die bestehende Diskussion zusammenzufassen, fügen Sie hinzu

cex.lab=1.5, cex.axis=1.5, cex.main=1.5, cex.sub=1.5

In Ihrem Plot, in dem 1,5 2, 3 usw. sein kann und der Standardwert 1 ist, wird die Schriftgröße erhöht.

x <- rnorm(100)

cex ändert nichts

hist(x, xlim=range(x),
     xlab= "Variable Lable", ylab="density", main="Title of plot", prob=TRUE)

hist(x, xlim=range(x),
     xlab= "Variable Lable", ylab="density", main="Title of plot", prob=TRUE, 
     cex=1.5)

Geben Sie hier die Bildbeschreibung ein

Fügen Sie cex.lab = 1,5, cex.axis = 1,5, cex.main = 1,5, cex = 1,5 hinzu

hist(x, xlim=range(x),
     xlab= "Variable Lable", ylab="density", main="Title of plot", prob=TRUE, 
     cex.lab=1.5, cex.axis=1.5, cex.main=1.5, cex.sub=1.5)

Geben Sie hier die Bildbeschreibung ein

Jeromy Anglim
quelle
2
Übrigens, wenn Sie versuchen, die Achse in einem Balkendiagramm zu ändern (z. B. für das Diagramm mit variabler Wichtigkeit in randomForest oder GBM), müssen Sie Folgendes verwenden cex.names(wenn Sie ein Mensch sind, der Dinge aus einer aufrechten Position liest, können Sie dies auch tun wollen las=2)
Genorama
22

Beachten Sie, dass " cex " Dinge ändert, wenn der Plot mit Text erstellt wird. Zum Beispiel die Darstellung eines agglomerativen hierarchischen Clusters:

library(cluster)
data(votes.repub)
agn1 <- agnes(votes.repub, metric = "manhattan", stand = TRUE)
plot(agn1, which.plots=2)

erzeugt ein Diagramm mit normal großem Text:

Geben Sie hier die Bildbeschreibung ein

und plot(agn1, which.plots=2, cex=0.5)wird dieses produzieren:

Geben Sie hier die Bildbeschreibung ein

OskrSaSi
quelle
Arbeiten Sie auch in faces2(von Chernoff Gesichtern )
Galled
In meinem Beispiel musste ich cex nicht auf das Plotten anwenden , sondern direkt auf das innere Objekt, um einen Effekt zu erzielen:plot(ci(roc(data$a, data$b, auc=TRUE, of="auc", print.auc=TRUE, print.auc.cex=1.5, plot=TRUE), of="thresholds", thresholds="best")))
Tapper
21

Durch Ausprobieren habe ich festgestellt, dass Folgendes erforderlich ist, um die Schriftgröße festzulegen:

  1. cexfunktioniert nicht in hist(). Verwenden Sie cex.axisfür die Zahlen auf den Achsen, cex.labfür die Beschriftungen.
  2. cexfunktioniert auch nicht axis(). Verwenden Sie cex.axisfür die Zahlen auf den Achsen.
  3. Anstatt Beschriftungen mit festzulegen hist(), können Sie sie mit festlegen mtext(). Sie können die Schriftgröße mit einstellen cex, aber mit einem Wert von 1 wird die Schrift auf das 1,5-fache des Standardwerts gesetzt !!! Sie müssen verwenden cex=2/3, um die Standardschriftgröße zu erhalten. Zumindest ist dies unter R 3.0.2 für Mac OS X mit PDF-Ausgabe der Fall.
  4. Sie können die Standardschriftgröße für die PDF-Ausgabe mit pointsizein ändern pdf().

Ich nehme an, es wäre viel zu logisch zu erwarten, dass R (a) tatsächlich das tut, was seine Dokumentation vorschreibt, (b) sich erwartungsgemäß verhält.

Urban Vagabond
quelle
2

Ich bin darauf gestoßen, als ich die Achsenbeschriftungen verkleinern wollte, aber alles andere gleich groß lassen wollte. Der Befehl, der für mich funktionierte, lautete:

par(cex.axis=0.5)

Vor dem Plotbefehl. Denken Sie daran, zu setzen:

par(cex.axis=1.0)

Stellen Sie nach dem Plotten sicher, dass die Schriftarten wieder die Standardgröße haben.

Odysseus Ithaka
quelle
2

Der Vollständigkeit halber: Skalieren von Text um 150% mit cex = 1.5, hier ist eine vollständige Lösung:

cex <- 1.5
par(cex.lab=cex, cex.axis=cex, cex.main=cex)
plot(...)
par(cex.lab=1, cex.axis=1, cex.main=1)

Ich empfehle, solche Dinge zu verpacken, um die Kesselplatte zu reduzieren, z.

plot_cex <- function(x, y, cex=1.5, ...) {
  par(cex.lab=cex, cex.axis=cex, cex.main=cex)
  plot(x, y, ...)
  par(cex.lab=1, cex.axis=1, cex.main=1)
  invisible(0)
}

die du dann so verwenden kannst:

plot_cex(x=1:5, y=rnorm(5), cex=1.3)

Die ...als Ellipsen in R bekannt und wird verwendet , um zusätzliche Parameter auf Funktionen übergeben. Daher werden sie üblicherweise zum Zeichnen verwendet. Folgendes funktioniert also wie erwartet:

plot_cex(x=1:5, y=rnorm(5), cex=1.5, ylim=c(-0.5,0.5))
Adam Erickson
quelle
1

Falls Sie die Schriftart der Beschriftungen des Histogramms erhöhen möchten, wenn Sie Beschriftungen = TRUE setzen

bp=hist(values, labels = FALSE, 
 main='Histogram',
 xlab='xlab',ylab='ylab',  cex.main=2, cex.lab=2,cex.axis=2)

text(x=bp$mids, y=bp$counts, labels=bp$counts ,cex=2,pos=3)
Yeinhorn
quelle