आप ggplot2 में पहलुओं में एक सामान्य लेबल कैसे जोड़ सकते हैं?


84

मैं अक्सर पहलू के लिए संख्यात्मक मान है। मैं अक्ष शीर्षक के समान पूरक शीर्षक में इन मुखर मूल्यों की व्याख्या करने के लिए पर्याप्त जानकारी प्रदान करना चाहता हूं। लेबर विकल्प बहुत अनावश्यक पाठ दोहराते हैं और लंबे समय तक परिवर्तनीय खिताब के लिए अनुपयोगी होते हैं।

कोई सुझाव?

डिफ़ॉल्ट:

test<-data.frame(x=1:20, y=21:40, facet.a=rep(c(1,2),10), facet.b=rep(c(1,2), each=20))
qplot(data=test, x=x, y=y, facets=facet.b~facet.a)

यहां छवि विवरण दर्ज करें

मुझे क्या अच्छा लगेगा:

यहां छवि विवरण दर्ज करें

मैं ggplot में सबसे अच्छा कर सकता हूं:

qplot(data=test, x=x, y=y)+facet_grid(facet.b~facet.a, labeller=label_both)

यहां छवि विवरण दर्ज करें

जैसा कि @Hendy द्वारा इंगित किया गया है, ggplot2 भूखंडों में एक द्वितीयक y अक्ष जोड़ें - इसे पूर्ण बनाएं


1
पवित्र गाय। मैं बस इस के लिए देख रहा था , यह गूगल के माध्यम से मिला ... और अब इसे एक मिनट पहले पूछा गया था। यह सवाल उनकी टिप्पणी के आधार पर एक ही बात पूछ रहा है, शीर्षक के बावजूद जो अन्यथा हो सकता है। उदाहरण के लिए बढ़िया मॉकअप। यह वास्तव में मेरी समस्या है - यह अच्छा होगा अगर मुझे अपने संख्यात्मक पहलुओं को स्पष्ट नहीं करना है। ग्राफ को एक सरल लेबल के साथ अपने लिए बोलना चाहिए जिसमें यह बताया गया हो कि पहलू वाले चर क्या थे।
हेन्डी

3
मैंने ईमेल के माध्यम से विंस्टन चांग (उनके एसओ हैंडल को नहीं जानते), मुख्य ggplot डेवलपर्स में से एक के साथ पूछताछ की। उन्हें नहीं लगता कि यह वर्तमान में एक विकल्प है, लेकिन इसे जोड़ने पर विचार कर सकते हैं। उन्होंने सुझाव दिया कि मैं जीथब पर एक मुद्दा जोड़ता हूं, इसलिए मैंने किया
हेंडी

1
ऐसा लगता है कि मेलिंग सूची पर आया था और विंस्टन मुझे बताएं। उन्होंने शीर्ष लेबल के लिए सामान्य कार्यान्वयन के साथ एक शाखा बनाई। धागा यहाँ देखें । @ अहदले: आप सही हैं। मुझे नहीं पता कि सामान्य रूप से इसे करना कितना कठिन है। अगर ऐसा कभी नहीं होता है ... ggplot के लिए मेरा आभार अभी भी बरकरार है :)
Hendy

1
कुछ बिंदु पर मैं आर / ggplot2 को कम करने और एक छवि संपादक का उपयोग करके कुछ वांछित संशोधन करने की कोशिश करना बंद कर देता हूं।
एंडी

2
सबसे अच्छा अभ्यास पर कोई अद्यतन यहाँ?
आर्थर यिप

जवाबों:


49

जैसा कि नवीनतम आंतरिक रूप से ggplot2उपयोग करता है gtable, किसी आंकड़े को संशोधित करना काफी आसान है:

library(ggplot2)
test <- data.frame(x=1:20, y=21:40, 
                   facet.a=rep(c(1,2),10), 
                   facet.b=rep(c(1,2), each=20))
p <- qplot(data=test, x=x, y=y, facets=facet.b~facet.a)

# get gtable object
z <- ggplotGrob(p)

library(grid)
library(gtable)
# add label for right strip
z <- gtable_add_cols(z, unit(z$widths[[7]], 'cm'), 7)
z <- gtable_add_grob(z, 
                     list(rectGrob(gp = gpar(col = NA, fill = gray(0.5))),
                          textGrob("Variable 1", rot = -90, gp = gpar(col = gray(1)))),
                     4, 8, 6, name = paste(runif(2)))

# add label for top strip
z <- gtable_add_rows(z, unit(z$heights[[3]], 'cm'), 2)
z <- gtable_add_grob(z, 
                     list(rectGrob(gp = gpar(col = NA, fill = gray(0.5))),
                          textGrob("Variable 2", gp = gpar(col = gray(1)))),
                     3, 4, 3, 6, name = paste(runif(2)))

# add margins
z <- gtable_add_cols(z, unit(1/8, "line"), 7)
z <- gtable_add_rows(z, unit(1/8, "line"), 3)

# draw it
grid.newpage()
grid.draw(z)

यहां छवि विवरण दर्ज करें

बेशक, आप एक फ़ंक्शन लिख सकते हैं जो स्वचालित रूप से पट्टी लेबल जोड़ते हैं। भविष्य के संस्करण में ggplot2यह कार्यक्षमता हो सकती है; हालांकि यकीन नहीं है।


- मैं सोच रहा हूँ कि यह अभी भी सबसे स्वच्छ दृष्टिकोण है, संस्करण 0.9.3.1 के रूप में। मुझे कुछ ऐसा नहीं दिखता जो नवीनतम प्रलेखन में "इस काल्पनिकता
yosukesabai

1
संस्करण 0.9.3.1 प्रदान करता है ggplotGrob()कि के रूप में ही है ggplot_gtable(ggplot_build())। मुझे लगता है कि यह अभी भी सबसे अच्छा तरीका है।
कोहके

1
यदि मैं गलत नहीं हूँ, तो यह समाधान अधिक मान्य नहीं है क्योंकि कुछ कार्य अब समाप्त हो गए हैं।
रेमी। बी

1
@ Remi.b यह अब कोशिश
rawr

3
यह ggplot2 3.2.1 और R 3.6.1 के साथ काम नहीं कर रहा है। कोई त्रुटि संदेश नहीं, लेकिन परिणामी भूखंड पर मुझे लेबल नहीं मिले।
16

5

ऐसा करने का एक बेहतर तरीका हो सकता है, लेकिन आप कर सकते हैं:

fac1 = factor(rep(c('a','b'),10))
fac2 = factor(rep(c('a','b'),10))
data = data.frame(x=1:10, y=1:10, fac1=fac1, fac2=fac2)
p = ggplot(data,aes(x,y)) + ggplot2::geom_point() + 
facet_grid(fac1~fac2)
p + theme(plot.margin = unit(c(1.5,1.5,0.2,0.2), "cm"))
grid::grid.text(unit(0.98,"npc"),0.5,label = 'label ar right', rot = 270) # right
grid::grid.text(unit(0.5,"npc"),unit(.98,'npc'),label = 'label at top', rot = 0)   # top

1

कोह्सके द्वारा उल्लिखित विधि के अलावा, आप बदलकर जोड़े गए बक्से में एक सीमा जोड़ सकते हैं

col=NA

सेवा

col=gray(0.5), linetype=1

इसके अलावा, बदलें

fill=gray(0.5)

के लिये

fill=grey(0.8)

तथा

gp=gpar(col=gray(1))

सेवा

gp=gpar(col=gray(0))

यदि आप चाहते हैं कि नई पट्टियाँ पहलू लेबलों से मेल खाएँ

अर्थात

z <- gtable_add_grob(z, 
      list(rectGrob(gp = gpar(col = gray(0.5), linetype=1, fill = gray(0.8))),
      textGrob("Variable 1", rot = -90, gp = gpar(col = gray(0)))),
      4, 8, 6, name = paste(runif(2)))
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.