tl; डॉ मेरी संतुष्टि के लिए ggpairs
में एक स्टैंडअलोन किंवदंती (पूरे साजिश में सामान्य रंगों का वर्णन) नहीं मिल सकता है।ggpairs में स्टैंडअलोन किंवदंती (2 ले लो)
लंबाई के लिए खेद है।
मैं GGally::ggpairs
(ggplot2
के साथ विभिन्न प्रकार के साजिश मैट्रिक्स ड्राइंग के लिए एक विस्तार पैकेज) का उपयोग करके एक (निचला त्रिकोणीय) जोड़े प्लॉट खींचने की कोशिश कर रहा हूं। यह अनिवार्य रूप से वही प्रश्न है जो How to add an external legend to ggpairs()? है, लेकिन मैं सौंदर्यपूर्ण रूप से उस प्रश्न के उत्तर से संतुष्ट नहीं हूं, इसलिए मैं इसे एक विस्तार के रूप में पोस्ट कर रहा हूं (यदि टिप्पणीकर्ताओं द्वारा सुझाया गया/अनुशंसित किया गया है, तो मैं इस प्रश्न को हटा दूंगा और एक उपहार प्रदान करूंगा इसके बजाय वह सवाल)। विशेष रूप से, मैं पौराणिक कथाओं को उप-प्लॉट फ्रेम के बाहर दिखाई देना चाहूंगा, या तो इसे एक वर्चुअल सबप्लॉट में डालकर अतिरिक्त चौड़ाई को पकड़ने की अनुमति दे सकता हूं, या (आदर्श) इसे एक अलग (खाली) सबप्लॉट में डाल सकता हूं। जैसा कि मैंने नीचे दिखाया है, मेरे दोनों आंशिक समाधानों में समस्याएं हैं।
नकली डेटा:
set.seed(101)
dd <- data.frame(x=rnorm(100),
y=rnorm(100),
z=rnorm(100),
f=sample(c("a","b"),size=100,replace=TRUE))
library(GGally)
बेस भूखंड समारोह: शीर्ष/अधिकार स्तम्भ ट्रिम करने के लिए
ggfun <- function(...) {
ggpairs(dd,mapping = ggplot2::aes(color = f),
columns=1:3,
lower=list(continuous="points"),
diag=list(continuous="blankDiag"),
upper=list(continuous="blank"),
...)
}
फंक्शन:
trim_gg <- function(gg) {
n <- gg$nrow
gg$nrow <- gg$ncol <- n-1
v <- 1:n^2
gg$plots <- gg$plots[v>n & v%%n!=0]
gg$xAxisLabels <- gg$xAxisLabels[-n]
gg$yAxisLabels <- gg$yAxisLabels[-1]
return(gg)
}
gg0 <- trim_gg(ggfun(legends=TRUE))
बाएँ कॉलम में किंवदंतियों से छुटकारा (के रूप में उपरोक्त लिंक किया गया प्रश्न):
library(ggplot2) ## for theme()
for (i in 1:2) {
inner <- getPlot(gg0,i,1)
inner <- inner + theme(legend.position="none")
gg0 <- putPlot(gg0,inner,i,1)
}
inner <- getPlot(gg0,2,2)
inner <- inner + theme(legend.position="right")
gg0 <- putPlot(gg0,inner,2,2)
समस्याएं:
- कथा के पीछे खाली पैनल वास्तव में कुछ बातों मास्किंग है; मुझे नहीं पता कि यह सामान्य रूप से पैनल के बाहर क्यों नहीं है, मुझे लगता है कि
ggpairs
- कर रहा है यदि यह पैनल के बाहर (शीर्ष पर या दाएं) के बाहर था, तो मैं कुछ अतिरिक्त छोड़ना चाहता हूं अंतरिक्ष तो पैनल स्वयं एक ही आकार के थे। हालांकि,
ggmatrix
/ggpairs
इस बारे में बहुत ही लचीला दिखता है।
एकमात्र विकल्प मैं दूर करने की कोशिश कर लिया है कथा निकालने और gridExtra::grid.arrange()
का उपयोग करके ggplot separate legend and plot पीछा कर रहा है:
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]]
return(legend)
}
library(gridExtra)
grid.arrange(getPlot(gg0,1,1),
g_legend(getPlot(gg0,2,2)),
getPlot(gg0,2,1),
getPlot(gg0,2,2)+theme(legend.position="none"),
nrow=2)
समस्याएं:
- अक्षरों और लेबलद्वारा दबाए गएवापस आ गए हैं ...
मैंने एक विशेष साजिश के साथ एक पैनल बनाने पर भी विचार किया जिसमें केवल किंवदंती थी (यानी। साजिश को दबाने के लिए theme(SOMETHING=element.blank)
का उपयोग करने का प्रयास कर रहा है, लेकिन यह नहीं पता कि इसे कैसे किया जाए।
एक अंतिम उपाय के रूप में, मैं कुल्हाड़ियों जहां अपने आप को उचित कुछ मामूली संशोधन के साथ समाधान 1 के लिए ट्रिम सकता है, लेकिन यह व्यावहारिक रूप से पुनर्रचना है क्या ggpairs
पहली जगह में कर रहा है ...
मैं समय यह सही में अब देखने के लिए नहीं है, लेकिन मुझे लगता है सबसे अच्छा तरीका है 'ggpairs' समारोह के एक संशोधन किया जाएगा। पैकेज रखरखाव बहुत उत्तरदायी था जब मैंने आखिरकार इसमें एक (छोटा) सुधार करने का सुझाव दिया था। – Roland
मुझे यकीन नहीं है कि यह वही है जो आप चाहते हैं, लेकिन, समाधान 1 में, किंवदंती को खाली पैनल में रखें। यही है, दूसरी अंतिम पंक्ति को इस प्रकार बदलें: 'भीतरी <- आंतरिक + थीम (legend.position = c (.5, 1.5)) ' –
अभी भी समाधान 1 में:' किंवदंतियों 'सेट को' FALSE' पर छोड़ना आसान है कि किंवदंतियों को हटाने की कोई जरूरत नहीं है। –