У меня есть подход, который проходит 90% пути, но я не уверен, как закончить дело. Чтобы получить одну легенду для размера, я использовал преобразование для преобразования входного размера в размер экрана. Это делает внешний вид легенды соответствующим дисплею. Чего я еще не понял, так это как применить подобное преобразование к fill
, чтобы оба они могли быть интегрированы в одну легенду.
Вот преобразование, которое в этом случае сжимает все 10 или больше:
library(scales)
shrink_10s_trans = trans_new("shrink_10s",
transform = function(y){
yt = if_else(y >= 10, y*0.1, y)
return(yt)
},
inverse = function(yt){
return(yt) # Not 1-to-1 function, picking one possibility
}
)
Затем мы можем использовать это преобразование для размера, чтобы выборочно отображать только точки размером 10 или больше. Это хорошо работает для легенды, за исключением интеграции кодировки заливки с кодировкой размера.
ggplot(xm,aes(x= Samples,y= fct_rev(Species), fill = Size < 10))+
geom_point(aes(size=Size), shape = 21)+
scale_size_area(trans = shrink_10s_trans, max_size = 10,
breaks = c(1,2,3,10,20,30,40),
labels = c(1,2,3,10,20,30,40)) +
scale_fill_manual(values = c(rgb(136,93,100, maxColorValue = 255),
rgb(236,160,172, maxColorValue = 255))) +
theme_bw()