Eine Möglichkeit ist die Verwendung rect
.
Verwenden Sie zuerst par("usr")
, um "die Extrema der Benutzerkoordinaten der Zeichenregion" zu erhalten.
Weil Sie mögen, dass der „Rahmen die gleiche Breite wie der Rahmen rund um das Grundstück haben sollte“, sind die x-Positionen einfach: Verwenden Sie den ersten und zweiten Wert der ‚user-Koordinaten‘ als xleft
und xright
.
Die unteren und oberen Positionen des rect
erfordern etwas mehr Arbeit. Die y-Position des title
"ist standardmäßig vertikal zentriert in (äußerem) Rand 3" (?title
). Verwenden Sie par("mai")
, um die Ränder in Zoll zu erhalten. Berechnen Sie den Mittelpunkt des oberen y-Rands, indem Sie Rand 3 durch 2 teilen (par("mai")[3]/2
). Definieren Sie eine Höhe des Rahmens z. 0,5, was in der Mitte zwischen der Mitte des Titels und der Grenze der Figurenregion bzw. der Zeichenregion entspricht.
Um von Inch zu Benutzerkoordinaten zu konvertieren, verwenden Sie grconvertY
. Das heißt, wir multiplizieren den Wert in Zoll mit diff(grconvertY(y = 0:1, from = "inches", to = "user"))
(siehe z.B. here). Dieser Wert wird dann zur oberen Benutzerkoordinate von y (coord[4]
) hinzugefügt.
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)
Was für eine Erleichterung, eine nicht fest codierte Alternative zu sehen! +1 – Henrik
@ Henrik Vielen Dank! 'grconvertX()' und 'grconvertY()' können * fast * Sie zu einer nicht-hartcodierten Basis-R-Lösung bringen, aber es fehlt (soweit ich das sehe) jedes Verständnis von 'Linien' als Längeneinheit, also Es ist einfacher, einfach einen seitlichen Schritt in die ** Grid ** - Welt zu machen. –
@ Henrik Nizza finden. Danke für die Bearbeitung, um es hinzuzufügen. –