В многопанельных/граненых графиках мне нравится, когда возможно скручивать панели вместе без пробелов между ними, например. используя theme(panel.spacing=grid::unit(0,"lines"))
(Эдвард Туфте говорит, что это хорошо, потому что межпанельные пространства создают отвлекающие визуальные эффекты, а также тратят пространство данных, и я выпил этот конкретный бит Kool-Aid.)
Проблема заключается в том, что в зависимости от точного диапазона значений внутри строки/столбца фасеток метки меток для соседних граней могут перекрываться. Например, на этом рисунке есть столкновение между ярлыком нижнего тика в верхней панели и верхней меткой метки на средней панели.
dd <- data.frame(x=rep(1:3,3),
y=c(0.1,0.2,0.3,
0.1,0.4,0.6,
1,2,3),
f=factor(rep(letters[1:3],each=3)))
library(ggplot2)
ggplot(dd,aes(x,y))+
facet_grid(f~.,scale="free")+
geom_point()+
theme_bw(base_size=24)+
theme(panel.spacing=grid::unit(0,"lines"))
ggsave("tmp1.png",width=4,height=6)
Я хочу создать общее, удобное решение этой проблемы - расширение пределов каждой грани на соответствующую сумму (она будет различной для каждой грани, поскольку диапазоны являются гетерогенными), но подавляя (по крайней мере) метки и ( возможно) отметки для экстремальных значений. Я сделал это в прошлом в супер-хакерском режиме, установив специальную функцию breaks
в scale_y_continuous
. Возможно, я подумал о некоторых других способах сделать это (и опубликую их как ответ, если я смогу заставить их работать), но я ищу (а) достаточно надежную общую функцию для указания labels
и/или breaks
.
Это не то же самое, что Автоматизировать галочку max и min в гранжевом ggplot, который просто хочет получить значения max/min по граням.
Это сложно сделать вообще и не может быть полностью разрешимым; Я думал о том, чтобы просто заглушить экстремальные ярлыки, но это провалилось бы, если бы было только два или три тика. Может быть решение с expand_limits()
, но это трудно сделать через грани...