Построение прямоугольника внутри заполненных контуров в R? - PullRequest
6 голосов
/ 20 августа 2010

Я пытаюсь построить прямоугольник в пределах закрашенного контура, но, к сожалению, когда я строю линии () после создания закрашенного контура, рисунок смещается вправо, потому что масштаб заставляет изображение слева, но поле остается с теми же координатами. Вот как выглядит мой код:

dev.new(width=6,height=7)
mypredict<-matrix(data=mypredict,nrow=20,ncol=25)
filled.contour(x=seq(from=-1.5,to=1.5,length=20),
y=seq(from=1,to=3.75,length=25),
z=mypredict,
col=hsv(h=seq(from=2/3,to=0,length=20),s=1,v=1)
)
top <- 3.42
bot <- 1.56
lines(c(-1,-1),c(bot,top))
lines(c(1,1),c(bot,top))
lines(c(-1,1),c(top,top))
lines(c(-1,1),c(bot,bot))

Кто-нибудь знает, как я могу построить эти линии в функции fill.contour? В противном случае линии не будут правильно отображаться на главном изображении, поскольку масштаб / условные обозначения графика располагаются справа.

Спасибо!

1 Ответ

6 голосов
/ 20 августа 2010

Страница справочника для filled.contour объясняет проблему (и дает решение)

Эта функция в настоящее время использует функцию «макета» и поэтому ограничена отображением полной страницы.В качестве альтернативы рассмотрим функции 'levelplot' и 'contourplot' из пакета 'lattice', которые работают в многоканальных дисплеях.

Выходные данные, полученные с помощью fill.contour , фактически представляют собой комбинацию двух графиков.; один - заполненный контур, а другой - легенда. Для этих двух графиков установлены две отдельные системы координат, , но они используются только для внутреннего использования - после возврата функции эти системы координат теряются. Если вы хотите аннотировать основной контурplot, например, для добавления точек, вы можете указать графические команды в аргументе plot.axes. Ниже приведен пример.

Таким образом, вы, по сути, передаете некоторые инструкции, какplot.axes параметры для переопределения стандартного поведения.

В вашем примере:

filled.contour(x = seq(from=-1.5,to=1.5,length=20),
      y = seq(from=1,to=3.75,length=25), z = mypredict,
      col = hsv(h=seq(from=2/3,to=0,length=20),s=1,v=1),
      plot.axes = {axis(1); axis(2); rect(left, bottom, right, top);})

Обратите внимание, что вам придется воссоздать две оси, иначе они не будут нарисованы.Кроме того, нет необходимости использовать оператор lines, когда есть функция rect!:)

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...