Una possibilità è utilizzare rect
.
Primo utilizzo par("usr")
per ottenere "gli estremi delle coordinate utente dell'area di stampa".
perché si vuole che il "telaio dovrebbe avere la stessa larghezza della cornice attorno la trama", gli X-posizioni sono semplici: usare il primo e secondo valori della 'user coordinate' come xleft
e xright
.
Le posizioni inferiore e superiore dello rect
richiedono un po 'più di lavoro. La posizione y di title
"" ha il valore predefinito per essere centrato verticalmente nel margine (esterno) 3 "(?title
). Utilizzare par("mai")
per ottenere i margini in pollici. Calcola il punto medio del margine y superiore dividendo il margine 3 per 2 (par("mai")[3]/2
). Definire un'altezza del telaio, ad es. 0,5, che corrisponde rispettivamente a metà strada tra il centro del titolo e il bordo della regione della figura e la regione del grafico.
Per convertire da pollici a coordinate utente, utilizzare grconvertY
. Cioè, moltiplichiamo il valore in pollici per diff(grconvertY(y = 0:1, from = "inches", to = "user"))
(vedi ad esempio here). Questo valore viene quindi aggiunto alla coordinata dell'utente superiore di y (coord[4]
).
coord <- par("usr")
y_mid <- par("mai")[3]/2
height <- 0.5
conv <- diff(grconvertY(y = 0:1, from = "inches", to = "user"))
rect(xleft = coord[1],
xright = coord[2],
ybottom = coord[4] + (y_mid * (1 - height) * conv),
ytop = coord[4] + (y_mid * (1 + height) * conv),
xpd = TRUE)
Che sollievo vedere un'alternativa non codificata! +1 – Henrik
@ Henrik Grazie! 'grconvertX()' e 'grconvertY()' può * quasi * portarti a una soluzione di base R non hardcoded, ma mancano (per quanto posso vedere) di qualsiasi comprensione di 'lines' come unità di lunghezza, quindi è più facile fare un passo indietro su ** grid ** - world. –
@ Henrik Bella scoperta. Grazie per la modifica per aggiungerlo. –