दो तरीकों से मैं सोच सकता हूं 1) दो किंवदंती grobs या 2) संयोजन एक और किंवदंती सौंदर्यशास्त्र हैकिंग। इन दोनों का उल्लेख उपरोक्त टिप्पणियों में @ माइक वाइस ने किया था।
दृष्टिकोण # 1: ग्रब्स का उपयोग करके एक ही साजिश में 2 अलग-अलग किंवदंतियों को जोड़ता है।
मैंने पौराणिक कथाओं को पकड़ने के लिए इस answer से कोड का उपयोग किया। बैपटिस्ट का arrangeGrob vignette एक उपयोगी संदर्भ है। printing के लिए
library(grid); library(gridExtra)
#Function to extract legend grob
g_legend <- function(a.gplot){
tmp <- ggplot_gtable(ggplot_build(a.gplot))
leg <- which(sapply(tmp$grobs, function(x) x$name) == "guide-box")
legend <- tmp$grobs[[leg]]
legend
}
#Create plots
p1 <- ggplot()+ geom_point(aes(x,y,size=z),data=d1) + scale_size(name = "point")
p2 <- ggplot()+ geom_line(aes(x,y,size=z),data=d2) + scale_size(name = "line")
p3 <- ggplot()+ geom_line(aes(x,y,size=z),data=d2) +
geom_point(aes(x,y, size=z * 100),data=d1) # Combined plot
legend1 <- g_legend(p1)
legend2 <- g_legend(p2)
legend.width <- sum(legend2$width)
gplot <- grid.arrange(p3 +theme(legend.position = "none"), legend1, legend2,
ncol = 2, nrow = 2,
layout_matrix = rbind(c(1,2),
c(1,3)),
widths = unit.c(unit(1, "npc") - legend.width, legend.width))
grid.draw(gplot)
नोट: arrangeGrob()
बजाय grid.arrange()
का उपयोग करें। मुझे (arrangeGrob) साजिश को बचाने के लिए png; grid.draw; dev.off
का उपयोग करना पड़ा।
कार्य # 2: एक और सौंदर्य कथा हैकिंग।
MilanoR इस पर एक शानदार पोस्ट है, आकार के बजाय रंग पर ध्यान केंद्रित करना। अधिक SO उदाहरण: 1) discrete colour और 2) colour gradient।
#Create discrete levels for point sizes (because points will be mapped to fill)
d1$z.bin <- findInterval(d1$z, c(0,2,4,6,8,10), all.inside= TRUE) #Create bins
#Scale the points to the same size as the lines (points * 100).
#Map points to a dummy aesthetic (fill)
#Hack the fill properties.
ggplot()+ geom_line(aes(x,y,size=z),data=d2) +
geom_point(aes(x,y, size=z * 100, fill = as.character(z.bin)),data=d1) +
scale_size("line", range = c(1,5)) +
scale_fill_manual("points", values = rep(1, 10) ,
guide = guide_legend(override.aes =
list(colour = "black",
size = sort(unique(d1$z.bin)))))
केवल एक ही आकार कथा नहीं है। यदि आप अलग-अलग किंवदंतियों को रखना चाहते हैं तो आपको एक या दूसरे के लिए कुछ और उपयोग करना होगा, जैसे 'लिनटाइप' या 'रंग'। –
क्या होगा यदि अंक 'आकार = z * 100' – mtoto
के लिए क्या एक और आकार की किंवदंती बनाना संभव है? शायद इस सरल उदाहरण के लिए इसे 'लिनटाइप' या 'रंग' द्वारा प्रतिस्थापित किया जा सकता है, लेकिन अगर' लिनटाइप 'या' रंग' का उपयोग किया गया है या आंकड़े के लिए उपयुक्त नहीं है, तो हमें अभी भी इस समस्या को हल करने की आवश्यकता है। @MikeWise – Tiger