Я работаю над этим вопросом here, чтобы получить легенду из подзаголовки 2х2 участков по всему окну. Цель состоит в том, чтобы получить одну легенду, а затем удалить другие легенды, достаточно только одной легенды, которая должна располагаться справа от всей панели.R: общая легенда от подзаголовка к панели 2x2 grid.arrange с решеткой
Может быть уместным
Код
require(lattice)
require(gridExtra)
f<-function(x) as.double(as.character(x)) #factors converted to vectors https://stackoverflow.com/a/40680020/54964
data.female <- structure(list(N11.1 = structure(c(3L, 3L), .Label = c("", "0.0",
"1.0", "N11"), class = "factor"), N22.1 = structure(c(2L, 2L), .Label = c("",
"0.0", "2.0", "N22"), class = "factor"), N33.1 = structure(c(2L,
2L), .Label = c("", "0.0", "N33"), class = "factor"), N44.1 = structure(2:3, .Label = c("",
"0.0", "0.1", "0.2", "N44"), class = "factor"), N21.1 = structure(c(2L,
2L), .Label = c("", "0.0", "N21"), class = "factor"), N31.1 = structure(c(2L,
2L), .Label = c("", "0.0", "N31"), class = "factor"), N32.1 = structure(c(5L,
7L), .Label = c("", "0.0", "10.8", "11.0", "12.0", "17.0", "20.9",
"22.8", "24.0", "3.0", "4.0", "44.0", "N32"), class = "factor")), .Names = c("N11.1",
"N22.1", "N33.1", "N44.1", "N21.1", "N31.1", "N32.1"), row.names = c("Sinus",
"Arr/AHB"), class = "data.frame")
data.male <- structure(list(N11.1 = structure(c(3L, 3L), .Label = c("", "0.0",
"1.0", "N11"), class = "factor"), N22.1 = structure(c(2L, 2L), .Label = c("",
"0.0", "2.0", "N22"), class = "factor"), N33.1 = structure(c(2L,
2L), .Label = c("", "0.0", "N33"), class = "factor"), N44.1 = structure(c(2L,
2L), .Label = c("", "0.0", "0.1", "0.2", "N44"), class = "factor"),
N21.1 = structure(c(2L, 2L), .Label = c("", "0.0", "N21"), class = "factor"),
N31.1 = structure(c(2L, 2L), .Label = c("", "0.0", "N31"), class = "factor"),
N32.1 = structure(c(11L, 9L), .Label = c("", "0.0", "10.8",
"11.0", "12.0", "17.0", "20.9", "22.8", "24.0", "3.0", "4.0",
"44.0", "N32"), class = "factor")), .Names = c("N11.1", "N22.1",
"N33.1", "N44.1", "N21.1", "N31.1", "N32.1"), row.names = c("Sinus",
"Arr/AHB"), class = "data.frame")
ID<-c("Sinus","Arr/AHB")
tl <- "female"
p1 <- barchart(f(N11.1)+f(N22.1)+f(N33.1)+f(N44.1)+f(N21.1)+f(N31.1)+f(N32.1) ~ ID,
data=data.female,
auto.key=list(space='right'),
ylim=c(0,50),
beside=TRUE,
ylab = "Number of cases",
xlab = "Population/Sample",
main = tl
)
tl <- "male"
p2 <- barchart(f(N11.1)+f(N22.1)+f(N33.1)+f(N44.1)+f(N21.1)+f(N31.1)+f(N32.1) ~ ID,
data=data.male,
auto.key=list(space='right'),
ylim=c(0,50),
beside=TRUE,
ylab = "Number of cases",
xlab = "Population/Sample",
main = tl
)
# Just repeat two barcharts more to get 2x2 example
tl <- "female"
p3 <- barchart(f(N11.1)+f(N22.1)+f(N33.1)+f(N44.1)+f(N21.1)+f(N31.1)+f(N32.1) ~ ID,
data=data.female,
auto.key=list(space='right'),
ylim=c(0,50),
beside=TRUE,
ylab = "Number of cases",
xlab = "Population/Sample",
main = tl
)
tl <- "male"
p4 <- barchart(f(N11.1)+f(N22.1)+f(N33.1)+f(N44.1)+f(N21.1)+f(N31.1)+f(N32.1) ~ ID,
data=data.male,
auto.key=list(space='right'),
ylim=c(0,50),
beside=TRUE,
ylab = "Number of cases",
xlab = "Population/Sample",
main = tl)
grid.arrange(p1,p2,p3,p4, ncol=2, nrow=2,left=("LEFT TITLE"),right=("RIGHT"),bottom=("BOTTOM"), top=("TOP"))
, что компилирует производить вышеуказанные участки сетки, но следующий не работает из-за легенды
grid.arrange(p1,p2,p3,p4, ncol=2, nrow=2,
legend=list(space='right',
text=c("N11.1","N22.1","N33.1","N44.1","N21.1","N31.1","N32.1"),
columns=1))
где простым способом было бы наследовать легенду от некоторых сюжетных и использовать что-то вроде auto.key
, но я не мог получить такой commond работает, пытаясь создать объект grop с командой легенды.
Что не так в команде легенды и есть ли какой-либо удобный способ унаследовать легенду о подзаголовках для всей панели, поэтому auto.key можно использовать во внешности панели?
Helper вопросы
Как цвета получают в наследство от автоматической команды auto.key создания Глоб к легенде?
Вместо того, чтобы вручную наклеивать этикетки с надписью (N11.1, N22.1, ...), как вы можете получить ее из подзаголовка?
Решетка на самом деле не позволяет создать гроб без его рисования, поэтому немного извлечь легенду из графика, прежде чем рисовать его на устройстве. – baptiste
@ baptiste, в каком направлении вы рекомендуете преодолеть это? – hhh
лично я бы использовал фасетку и/или ggplot2. Но с решеткой я бы, вероятно, посмотрел на создание вещей с помощью низкоуровневых функций сетки, навигацию по видовым экранам после рисования, извлечение одной легенды как grob, повторное рисование ее в новом окне просмотра и т. Д. Болезненное, но возможно выполнимое. Или для одноразового использования, я бы, вероятно, использовал Illustrator для редактирования моего графика вручную. – baptiste