Как я могу нанести символы легенды и метки на другую строку в R?

Я пытаюсь построить легенду в базе R с символами по горизонтали и соответствующими метками под символами в следующей строке. Легенда будет отображаться на полях (не включена в данные примера). Есть ли способ использовать графические параметры для решения этой проблемы с помощью функции legend()? В противном случае я попробую текстовые метки, но я предпочитаю более управляемый подход.

У меня есть этот пример данных:

plot(c(1,2,3,4,5), c(1,2,3,4,5), xlim=c(0,5), ylim=c(0,5),  main = "", xlab = "", ylab = "")

legendEntries <- c(0.05, 0.1, 0.15, 0.2, 0.25) # which values in legend
legendSizes   <- sqrt( legendEntries / pi ) * 10 # calculate pch size 
legend(1, 2, title="", horiz = T,  legend=legendEntries, col="black", pch=rep(21,5), 
   pt.bg = "#ff166c", pt.cex = legendSizes, bty = "n")

И хочу создать что-то вроде этого:

пример легенды

Спасибо!

Павел

(редактирование: добавлено изображение в текст и дополнительная информация)


person romepa    schedule 20.02.2017    source источник


Ответы (1)


Вы можете рисовать отдельно точки и текст.

Что-то вроде:

# Make the basic plot
    plot(c(1,2,3,4,5), c(1,2,3,4,5), xlim=c(0,5), ylim=c(0,5),  main = "", xlab = "", ylab = "")
    # set up the legend entries and sizes
    legendEntries <- c(0.05, 0.1, 0.15, 0.2, 0.25) # which values in legend
    legendSizes   <- sqrt( legendEntries / pi ) * 10 # calculate pch size 

# plot the legend points
    points(y = rep(1, 5), x = seq(3,4, 0.25), pch = 21, cex = sqrt( legendEntries / pi ) * 10,
           bg = "#ff166c")
# plot the text
    text(y = rep(0.7, 5), x = seq(3,4, 0.25),
         labels = legendEntries)

Для построения графика за пределами области графика (т.е. на полях) вы можете использовать параметр xpd как xpd = TRUE:

plot(c(1,2,3,4,5), c(1,2,3,4,5), xlim=c(0,5), ylim=c(0,5),  main = "", xlab = "", ylab = "")

legendEntries <- c(0.05, 0.1, 0.15, 0.2, 0.25) # which values in legend
legendSizes   <- sqrt( legendEntries / pi ) * 10 # calculate pch size 

points(y = rep(-0.8, 5), x = seq(1,2, 0.25), pch = 21, cex = sqrt( legendEntries / pi ) * 10,
       bg = "#ff166c", xpd = TRUE)
text(y = rep(-1, 5), x = seq(1,2, 0.25),
     labels = legendEntries, xpd = TRUE)
person ira    schedule 20.02.2017
comment
Спасибо, но я пытаюсь изобразить легенду на полях сюжета. Кажется, это работает только в области сюжета. Я могу попытаться объединить сюжет текстовой части с легендой (), но я надеялся, что есть способ использовать графические параметры для ее решения. - person romepa; 20.02.2017
comment
Хорошо, спасибо. Я могу работать с этим. Поскольку легенда, которую я хочу, довольно проста, мне не нужна функция legend(). - person romepa; 20.02.2017