Как изменить цвет фона для сюжета / вставки в R?
Я хотел бы добавить субплот к существующему графику в R. Подплот (вставка) должен иметь другой цвет фона. Я попробовал следующее:
#install.packages("TeachingDemos", dependencies=T)
library(package="TeachingDemos")
d0 <- data.frame(x = rnorm(150, sd=5), y = rnorm(150, sd=5))
d0_inset <- data.frame(x = rnorm(1500, sd=5), y = rnorm(1500, sd=5))
plot(d0)
subplot(
fun = plot(
d0_inset
, col = 2
, pch = '.'
, mgp = c(1,0.4,0)
, ann = F
, cex.axis=0.5
)
, x = grconvertX(c(0.75,1), from='npc')
, y = grconvertY(c(0,0.25), from='npc')
, type = 'fig'
, pars = list(
mar = c(1.5,1.5,0,0) + 0.1
, bg = "blue" # this should change the background color
)
)
В помощь subplot()
это говорит о pars
:
список параметров, которые должны быть переданы в пар перед запуском
fun
,
Кажется, что очень трудно изменить цвет фона графика, так как графический параметр имеет другое значение в plot()
, Поэтому нужно установить цвет фона, используя par()
, но почему это не работает для subplot
? (Я также попытался поместить функцию plot в внешнюю функцию, которая вызывает par()
а также plot()
, но это не помогло).
Почему участок не работает должным образом?
1 ответ
bg
аргумент par
изменить цвет фона устройства не сюжета. Поскольку вы просто добавляете график к уже открытому и использованному устройству, это невозможно (из-за перьевого и бумажного способа base
участки нарисованы). Вместо этого вы можете сделать следующее (основываясь на этом предыдущем ответе):
plot(d0)
subplot(fun = {plot(d0_inset, mgp = c(1,0.4,0), ann = F, cex.axis=0.5);
rect(par("usr")[1],par("usr")[3],par("usr")[2],par("usr")[4],col = "blue");
points(d0_inset, col=2, pch=".") },
x = grconvertX(c(0.75,1), from='npc'),
y = grconvertY(c(0,0.25), from='npc'),
pars = list(mar = c(1.5,1.5,0,0) + 0.1), type="fig")
Редактировать: если вы хотите, чтобы область, содержащая также аннотации, была синей, другое решение, которое я вижу, состоит в том, чтобы нарисовать прямоугольник до рисования подплота (используя координаты, которые вы дали функции подпункта):
plot(d0)
rect(grconvertX(0.75, from='npc'), grconvertY(0, from='npc'),
grconvertX(1, from='npc'), grconvertY(0.25, from='npc'),
col="blue", border=NA)
subplot(fun = plot(d0_inset, mgp = c(1,0.4,0), ann = F,
cex.axis=0.5,col=2, pch=".") ,
x = grconvertX(c(0.75,1), from='npc'),
y = grconvertY(c(0,0.25), from='npc'),
pars = list(mar = c(1.5,1.5,0,0) + 0.1), type="fig")