Как вывести легенду за пределы области сюжета?

Моя проблема связана с автомобильным пакетом.

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

library(car)
mtcars$g <- as.factor(mtcars$vs)

densityPlot(mpg,mtcars$g,show.bw=T, kernel=depan,legend=list(location="topleft",title=NULL))




person aleksandar_m    schedule 01.11.2019    source источник
comment
Вам будет легче помочь, если вы включите простой воспроизводимый пример с образцом ввода, который можно использовать для тестирования и проверки возможных решений.   -  person MrFlick    schedule 01.11.2019


Ответы (1)


Наверное, проще всего не строить легенду с помощью функции densityPlot(), а добавить ее отдельно с помощью legend(). Следующий код является примером того, как это можно сделать. Полученная фигура выглядит так:

введите здесь описание изображения

library(car)
mtcars$g <- as.factor(mtcars$vs)

par(mar=c(4,4,4,2))
# obtaining results from kernel density and saving results
# need saved values for bandwidth in legend
# also plots the kernel densities
d <- densityPlot(mtcars$mpg,mtcars$g
            ,show.bw=T
            ,kernel=depan
            ,legend=F # no default legend
            ,col = c('black','blue')
            ,lty=c(1,2))

# allows legend outside of plot area to be displayed
par(xpd=T)
# defining location based on the plot coordinates from par('usr')
legend(x=mean(par('usr')[c(1,2)]) # average of range of x-axis
       ,y=par('usr')[4]+0.015 # top of the y axis with additional shift
       ,legend = c(paste('0 (bw = ',round(d$`0`['bw'][[1]],4),')',sep='') # extract bw values from saved output and
                   ,paste('1 (bw = ',round(d$`1`['bw'][[1]],4),')',sep='')) # formatting similar to default, except with rounding bw value
       ,ncol=1 # change to 2 if you want entries beside each other
       ,lty=c(1,2) # line types, same as above
       ,col=c('black','blue') # colors, same as above
       ,lwd=1
       ,xjust = 0.5 # centers legend at x coordinate
       ,yjust = 0.5 # centers legend at y coordinate
       )

par(xpd=F)
person Calvin    schedule 28.11.2019