Ik ben in de war. Wat is de juiste manier om de lettergrootte van tekst in de titel, labels en andere plaatsen van een plot te vergroten?
Bijvoorbeeld
x <- rnorm(100)
hist(x, xlim=range(x), xlab= "Variable Label",
ylab="density", main="Title of plot", prob=TRUE, ps=30)
Het argument ps
verandert de lettergrootte niet (maar er staat in R Help voor ?par
dat het voor “de puntgrootte van tekst is (maar niet voor symbolen) “.
Is het ook mogelijk om het wijzigen van de lettergrootte te scheiden van de plotfunctie zoals hist
?
Antwoord 1, autoriteit 100%
Je wilt zoiets als het argument cex=1.5
om lettertypen 150 procent te schalen. Maar zie help(par)
want er zijn ook cex.lab
, cex.axis
, …
Antwoord 2, autoriteit 82%
Dus, om de bestaande discussie samen te vatten, voeg toe
cex.lab=1.5, cex.axis=1.5, cex.main=1.5, cex.sub=1.5
naar uw plot, waarbij 1.5 2, 3, etc. kan zijn en een waarde van 1 de standaardwaarde is, zal de lettergrootte vergroten.
x <- rnorm(100)
cex verandert niets
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)
Cex.lab=1.5, cex.axis=1.5, cex.main=1.5, cex.sub=1.5 toevoegen
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)
Antwoord 3, autoriteit 13%
Merk op dat “cex” dingen verandert wanneer de plot met tekst wordt gemaakt. Bijvoorbeeld de plot van een agglomeratieve hiërarchische clustering:
library(cluster)
data(votes.repub)
agn1 <- agnes(votes.repub, metric = "manhattan", stand = TRUE)
plot(agn1, which.plots=2)
produceert een plot met tekst van normale grootte:
en plot(agn1, which.plots=2, cex=0.5)
zullen deze produceren:
Antwoord 4, autoriteit 13%
Met vallen en opstaan heb ik vastgesteld dat het volgende nodig is om de lettergrootte in te stellen:
cex
werkt niet inhist()
. Gebruikcex.axis
voor de nummers op de assen,cex.lab
voor de labels.cex
werkt ook niet inaxis()
. Gebruikcex.axis
voor de cijfers op de assen.- In plaats van labels in te stellen met
hist()
, kun je ze ook instellen metmtext()
. U kunt de lettergrootte instellen metcex
, maar als u een waarde van 1 gebruikt in feite stelt u het lettertype in op 1,5 keer de standaardwaarde!!!U moetcex=2/3
om de standaard lettergrootte te krijgen. Dit is in ieder geval het geval onder R 3.0.2 voor Mac OS X, met gebruik van PDF-uitvoer. - Je kunt de standaard lettergrootte voor PDF-uitvoer wijzigen met
pointsize
inpdf()
.
Ik veronderstel dat het veel te logisch zou zijn om te verwachten dat R (a) daadwerkelijk doet wat de documentatie zegt dat het zou moeten doen, (b) zich op een verwachte manier gedraagt.
Antwoord 5, autoriteit 4%
Ik kwam dit tegen toen ik de aslabels kleiner wilde maken, maar al het andere dezelfde grootte wilde laten. Het commando dat voor mij werkte, was:
par(cex.axis=0.5)
Vóór het plotcommando. Vergeet niet om:
par(cex.axis=1.0)
Na de plot om ervoor te zorgen dat de lettertypen teruggaan naar de standaardgrootte.
Antwoord 6, autoriteit 2%
Als u het lettertype van de labels van het histogram wilt vergroten bij het instellen van labels=TRUE
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)
Antwoord 7
Voor de volledigheid, tekst met 150% schalen met cex = 1.5
, hier is een volledige oplossing:
cex <- 1.5
par(cex.lab=cex, cex.axis=cex, cex.main=cex)
plot(...)
par(cex.lab=1, cex.axis=1, cex.main=1)
Ik raad aan om dit soort dingen in te pakken om boilerplate te verminderen, bijvoorbeeld:
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 je dan als volgt kunt gebruiken:
plot_cex(x=1:5, y=rnorm(5), cex=1.3)
De ...
staan bekend als ellipsen in R en worden gebruikt om extra parameters door te geven aan functies. Daarom worden ze vaak gebruikt voor het plotten. Het volgende werkt dus zoals verwacht:
plot_cex(x=1:5, y=rnorm(5), cex=1.5, ylim=c(-0.5,0.5))
Antwoord 8
Als alternatief kunt u de resolutie van de opgeslagen afbeelding wijzigen met de res-parameter van het grafische apparaat:
png(file = "myplot1.png", bg = "transparent", res = 100)
plot(1:10)
dev.off()
png(file = "myplot2.png", bg = "transparent", res = 200)
plot(1:10)
dev.off()
Dit behoudt dezelfde afbeeldingsgrootte in pixels, maar verandert de beeldverhouding van de plot, inclusief lettergrootte.