Немного грязный хак может позволить вам получить функцию legend()
, чтобы дать вам необходимую информацию. Более умный человек, чем я, вероятно, будет выяснять, как legend()
вычисляет расположение ячеек и реплицирует это вне функции. Обратите внимание, что редактирование стандартных функций R, вероятно, не рекомендуется.
Если вы не изменяли функции R все же, простой (и временный) способ доступа к нему, набрав
fix(legend)
Typing
rm(legend)
позже будет отменить изменения.
Найти этот раздел, который говорит fill <- rep
и добавьте строки, указанные в комментариях:
fillList <- NULL ## added
if (mfill) {
if (plot) {
fill <- rep(fill, length.out = n.leg)
rect2(left = xt, top = yt + ybox/2, dx = xbox, dy = ybox,
col = fill, density = density, angle = angle,
border = border)
fillList <- data.frame(left = xt, top = yt + ybox/2, dx = xbox, dy = ybox) ## added
}
xt <- xt + dx.fill
}
найти очень последнюю строку и изменить его
invisible(list(rect = list(w = w, h = h, left = left, top = top),
text = list(x = xt, y = yt), fillList=fillList)) ## modified
Теперь называют легендой через
output <- legend(...) ## replace ... with whatever you want to have as inputs
и ничьи треугольники, используя информацию, возвращаемую legend()
так:
with(output$fillList[1,], { ## first box
polygon(c(left, left+dx, left+dx), c(top, top, top-dy), col=myColour, border=NA)
})
Почему у вас есть несколько цветов для одного и того же? – Molx
@Molx: Представьте простой пример: представьте круговую диаграмму или график с разбивкой по столбцам, где у вас есть разбивка по полу (мужчина/женщина = синий/красный) и класс дохода (низкий/средний/высокий доход = низкий/цвет средней/высокой интенсивности). В результате получается всего 6 комбинаций цвета и интенсивности цвета. Когда вы получаете еще несколько категорий, становится желательным иметь легенду, которая суммирует цвет и интенсивность отдельно, а не перечисляет все возможные комбинации. –