Хочу отметить, что Джош обеспечил приемлемое решение этой проблемы, но это может быть полезно понять , почемуmap()
имеет поведение, которое вы описываете. По существу это сводится к map()
, устанавливая размер области для построения графика на основе текущего размера &. Соотношение сторон устройства (фигурная область более конкретно) в момент рисования.
Таким образом, одно решение без преобразования в другой формат, как хорошо демонстрирует Джош, - это просто перерисовать карту после, вы перемасшлили устройство до нужного размера. Вы можете избежать некоторых догадок, выполнив пару вычислений на основе соотношения сторон par("usr")
, а затем установите для устройства ширину, совместимую с этим соотношением сторон.
Наверное, больше хлопот, чем решение Джоша, но оно объясняет поведение. Более подробное описание проблемы приведено ниже.
Причина, по которой обращается карта не «заполнить» устройство (до указанных краев) связана с кодом в map()
установив размер области черчения, чтобы иметь отношение конкретного аспекта на основе размер устройства и т. д. Полученная область построения имеет такой размер, что она помещается внутри устройства, но сохраняет правильное соотношение сторон, поэтому может не полностью заполнять его.
Ключевой фрагмент кода заключается в следующем:
else {
par(mar = mar)
p <- par("fin") - as.vector(matrix(c(0, 1, 1,
0, 0, 1, 1, 0), nrow = 2) %*% par("mai"))
par(pin = p)
p <- par("pin")
p <- d * min(p/d)
par(pin = p)
d <- d * myborder + ((p/min(p/d) - d)/2)/aspect
usr <- c(xrange, yrange) + rep(c(-1, 1), 2) *
rep(d, c(2, 2))
par(usr = usr)
}
с d
определены чуть раньше, как:
d <- c(diff(xrange), diff(yrange)) * (1 + 2 * myborder) *
aspect
(для примера, вы даете). Вторая строка ветви else
получает текущий размер области фигуры в дюймах. Область фигуры - это размер на устройстве области, содержащей поля и участок участка, но не любой внешний край. Фактически, если нет активного внешнего поля, этот код захватывает размер устройства (и делает корректировку). Затем этот результат используется для установки размера области построения графика, который обновляется.
Предполагается, что цель состоит в том, чтобы взять размер текущей области фигуры и использовать ее для обновления региона, в который нарисована карта. Размер этой области печати в этом смысле контролируется с помощью соотношения сторон устройства; если вы начинаете с широкого, но короткого окна, то в области вычисленного графика не будет необходимости использовать всю доступную ширину (если бы соотношение сторон было неправильным), и, следовательно, область графика будет иметь размер, меньший, чем доступное пространство ,
Относительно того, почему это не обновляется при изменении размеров окна, а именно потому, что в разводного время размер черчения области устанавливают абсолютно в дюймов. Если вы измените размер устройства, размер области печати останется прежним, и, следовательно, карта будет обрезана, если вы достаточно урезаете устройство или используете меньше и меньше места на устройстве, если вы увеличите его.
Вы можете указать размер окна графика перед вызовом графика, например dev.new (width = 3, height = 3) – user20650