R легенда, символы точек маскируются линиями - PullRequest
2 голосов
/ 29 марта 2012

Есть ли способ нарисовать линии таким образом, чтобы они начинались со стороны точек, или чтобы символы находились на переднем плане?

Моим решением было сделать символы больше иболее видимым.

Редактировать 1: это для графика {графика} программы R.

Редактировать 2: код для популярного запроса.

legend(2,.4,bty='n', c('sugar','citrus','none'), pch=c('s','c','u'), pt.bg='white',lty= c(1,2,3), lwd=1.5, title="Condition",pt.cex=c(1.5),cex=1.5)

Редактировать 3:Это решается для сюжета (type = 'b'), но почему-то не для легенды.

Спасибо за чтение!

Ответы [ 3 ]

2 голосов
/ 29 марта 2012

Единственное, что я могу придумать, - это вручную определить длину штрихов, пока они не будут выглядеть так, как вы хотите. Например, это:

> plot(1,1)
> legend(c("A", "B"), col = 1:2, x = 1, y = .8, lty="99", pch=1:2)

создает изображение ниже.

Параметр lty позволяет указать длину строк и тире в виде шестнадцатеричных символов. В этом случае говорится, что нужно создать строку длиной 9, затем создать пробел длины 9 и повторить. Похоже, 9 соответствует наилучшему соответствию пробелу вокруг нормального символа pch.

Обратите внимание, что вам, вероятно, потребуется настроить это в зависимости от размера изображения, символа и т. Д. В конечном счете, мой совет - экспортировать изображение из R и подправить изображение для удовлетворения ваших потребностей в программном обеспечении для графического редактирования.

graph with manual dash lengths

1 голос
/ 29 марта 2012

Следуя предложению @JeffAllen, вот способ получить то, что, я думаю, вы могли бы хотеть. Требуется модификация функции legend() для возврата положения точек (они задаются x1 и y1 в body(legend)[[46]]).

legend2 <- legend
body(legend2)[[49]] <- quote(
  invisible(list(rect = list(w = w, h = h, left = left, top = top),
  text = list(x = xt, y = yt), points = list(x = x1, y = y1)))
)

Составить сюжет:

plot(-100:100, -100:100, type = "b")

При рисовании легенды нарисуйте белые линии (pch = 21 с pt.bg = 'white') над линиями и присвойте объекту значения, невидимые для legend2(). Обратите внимание также на изменения pt.lwd и pt.cex.

myLegend <- legend2(1, .8, bty = 'n', c('sugar','citrus','none'), pch = 21,
  pt.bg = 'white', pt.lwd = 0, lty = c(1, 2, 3), lwd = 1.5, title = "Condition",
  pt.cex = c(1.8), cex = 1.5)

Наконец, нарисуйте символы, которые вы хотите использовать в легенде, используя points(), предоставив значения x и y из объекта myLegend.

points(myLegend$points$x, myLegend$points$y, pch = c('s','c','u'), cex = 1.5)

И это должно дать вам что-то вроде:

An example plot

1 голос
/ 29 марта 2012

Вы также можете использовать заполненные точки, предложенные R (pch = 21: 25), и указать цвет заливки, используя pc.bg, который передается вызову points при создании легенды.

plot(1,1)
legend(c("A", "B"), col = 1:2, x = 1, y = .8, lty=1, pt.bg=1:2, pch=21:22)

генерирует следующее:

graph with filled points

...