Как построить закрашенную рамку вокруг линии и указать легенду? - PullRequest
0 голосов
/ 28 ноября 2018

Некоторые данные

dummy.dt <- data.frame(c(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1000))

plot(dummy.dt, type="n", xlab="x" , ylab="y", xaxt = "n", log = "y")

legend("top", inset=.02, title="legend",
       c("1", "2"), 
       pch = c(1, 1), 
       lty = c(1, 1),
       col=c("blue", "orange"),
       fill=c(rgb(red = 200, green = 200, blue = 200, maxColorValue = 255, alpha = 50), rgb(red = 100, green = 100, blue = 0, maxColorValue = 100, alpha = 50))
       )

Результат выглядит следующим образом:

enter image description here

Результат, который я хотел бы получить, будетбыть заполненной коробкой вокруг линий.Как манипулировать размером заполненного поля, созданного fill?

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

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

plot(1)

# "filled boxes" made of lines
legend("top", inset = 0.02, legend = 1:2, title = "legend",
       lty = 1, lwd = 10, box.col = "white",
       pch = NA,
       col = c("grey90", "yellow"))

# lines and points
legend("top", inset = 0.02, legend = 1:2, title = "legend",
       lty = 1, lwd = 1, bty = "n",
       pch = 1,
       col = c("blue", "orange"))

enter image description here

Вторая возможность - уменьшить длину отрезков линии, используяseg.len.Затем коробки делаются из очков.Обратите внимание, что нам нужно указать одинаковые lwd и seg.len в обоих вызовах легенды, то есть также в вызове для «ящиков», где lty = 0.

plot(1)

# "filled boxes" made of points
legend("top", inset = 0.02, legend = 1:2, title = "legend",
       lty = 0, lwd = 1, seg.len = 1,
       pch = 15, pt.cex = 2,
       col = c("grey90", "yellow"))

# lines & points  
legend("top", inset = 0.02, legend = 1:2, title = "legend",
       lty = 1, lwd = 1, seg.len = 1, 
       pch = 1, bty = "n",
       col = c("blue", "orange"))

enter image description here

0 голосов
/ 28 ноября 2018

Непонятно, зачем вам вообще нужен fill.Если вы пропустите это, вы получите только линии плюс символ точки, выделенный цветом:

legend("top", inset=0.2, title="legend",
       c("1", "2"), 
       pch = c(1, 1), 
       lty = c(1, 1),
       col=c("blue", "orange")
   # fill=c(rgb(red = 200, green = 200, blue = 200, maxColorValue = 255, alpha = 50), 
   #        rgb(red = 100, green = 100, blue = 0, maxColorValue = 100, alpha = 50)
)
...