#r #graphics
Вопрос:
Если я создам новое графическое устройство, координаты пользователя, похоже, определяют квадрат (0,1), но я не могу делать никаких пометок, потому plot.new
что он еще не был вызван:
gt; dev.new() gt; par()$usr [1] 0 1 0 1 gt; points(0.5, 0.5) Error in plot.xy(xy.coords(x, y), type = type, ...) : plot.new has not been called yet
Есть ли простой способ превратить это графическое устройство в рисованный холст с пользовательскими координатами в (0,1),(0,1)?
Я пробовал просто plot.new()
, но это создает невидимую пустую диаграмму с пространством для полей. Точки (0,0) и (1,1) не находятся в углах графического устройства.
Я думаю , что мне нужно установить некоторые параметры маржи c(0,0,0,0)
, но я не уверен, какие именно, и, возможно, есть более прямой способ.
Конечным результатом должно быть пустое графическое окно (или другое устройство), которое points(0,0)
создает точку в левом нижнем углу (или, точнее, только четверть символа точки) и points(1,1)
создает четверть точки в правом верхнем углу.
Комментарии:
1.
plot(NA, xlim = 0:1, ylim = 0:1)
?2. @r2evans нет, из-за полей (и всех чернил для рисования, я хочу чистый холст!)
Ответ №1:
par(mar = c(0, 0, 0, 0)) plot(NA, xlim=0:1, ylim=0:1, ann=FALSE, frame=FALSE, xaxt="n", yaxt="n", xaxs="i", yaxs="i")
xlim=
иylim=
необходимы, потому что он не может автоматически определять диапазоны на основе данных;ann=
иframe=
убедитесь, что ни метки оси, ни рамка/рамка не показаны;xaxt=
иyaxt=
удалите галочки; это может быть немного излишним, так как даже если они будут нанесены на график, они будут находиться за пределами отображаемой области, но я подумал, что упомяну об этом на случай, если вы когда-нибудь будете использоватьpar(mar=..)
не все нули;xaxs=
иyaxs=
отключает расширение на 4%, которое по умолчанию используется в базовом графическом движке R.
Ответ №2:
Решение, по-видимому, состоит в том, чтобы установить mar
нули и указать "i"
для xaxs
и yaxs
при настройке графика;
gt; par(mar=c(0,0,0,0)) gt; x=0:1 gt; y=0:1 gt; plot(x,y, type="n", xaxs="i", yaxs="i") gt; gt; points(1,1,pch=19,cex=4) gt; gt; points(0,0,pch=19,cex=4)
Без настройки xaxs
, и yaxs
есть крошечный запас:
Разница между стилем «r» по умолчанию и стилем «i» заключается в том, что:
Style ‘"r"’ (regular) first extends the data range by 4 percent at each end and then finds an axis with pretty labels that fits within the extended range. Style ‘"i"’ (internal) just finds an axis with pretty labels that fits within the original data range.
что, вероятно, означает, что это работает только для «довольно» точных границ, таких как 0 и 1, но может не сработать, если мне нужна система координат точно между 3.245 и 93.1 на оси… Хотя я пробовал и думаю, что «красивое» соображение относится исключительно к меткам — предел оси точен.