Ggplot2 में रंग भरने के लिए बनावट कैसे जोड़ें


103

मैं scale_brewer()फ़िल फ़िल के लिए उपयोग कर रहा हूं और ये रंग (स्क्रीन पर और रंगीन प्रिंटर के माध्यम से) में सुंदर दिखते हैं, लेकिन काले और सफेद प्रिंटर का उपयोग करते समय अपेक्षाकृत समान रूप से प्रिंट करते हैं। मैंने ऑनलाइन ggplot2दस्तावेज़ खोजे, लेकिन रंग भरने के लिए बनावट जोड़ने के बारे में कुछ नहीं देखा। क्या ऐसा करने का कोई आधिकारिक ggplot2तरीका है या क्या किसी के पास कोई हैक है जो वे उपयोग करते हैं? बनावट से मेरा मतलब है कि विकर्ण सलाखों, रिवर्स विकर्ण सलाखों, डॉट पैटर्न आदि जैसी चीजें जो काले और सफेद रंग में मुद्रित होने पर रंगों को अलग करती हैं।


जवाबों:


35

ggplot colorbrewer palettes का उपयोग कर सकते हैं। इनमें से कुछ "फोटोकॉपी" के अनुकूल हैं। तो mabe कुछ इस तरह आप के लिए काम करेंगे?

ggplot(diamonds, aes(x=cut, y=price, group=cut))+
geom_boxplot(aes(fill=cut))+scale_fill_brewer(palette="OrRd")

इस मामले में OrRd एक पट्टिका है जो कलरब्रिज वेबपेज पर पाई जाती है: http://colorbrewer2.org/

फोटोकॉपी फ्रेंडली: यह इंगित करता है कि दी गई रंग योजना ब्लैक एंड व्हाइट फोटोकॉपी का सामना करेगी। डायवर्जिंग योजनाओं को सफलतापूर्वक फोटोकॉपी नहीं किया जा सकता है। हल्केपन में अंतर को अनुक्रमिक योजनाओं के साथ संरक्षित किया जाना चाहिए।


22
ओपी के सवाल का जवाब नहीं देता। मैं यहां इसलिए आया क्योंकि मैं कुछ रंगों से जुड़ा हुआ हूं। यह स्वीकृत 'उत्तर' यह नहीं बताता है कि बनावट कैसे लागू की जाती है।
MS Berends

3
@ यह आपके प्रश्न का उत्तर नहीं देता है । बहुत यकीन है कि हरे रंग की जाँच चिह्न एक संकेत है कि इसने सवाल का जवाब दिया है!
यान फोटो

10
चेक मार्क से मूर्ख मत बनो। सवाल यह था कि बनावट कैसे लागू की जाती है - और इसका उत्तर नहीं दिया जाता है। बॉक्स के बाहर एक विचार प्रदान किया गया था, हाँ, लेकिन सवाल का जवाब नहीं।
एमएस बर्ड्स 22

83

हे लोग यहाँ एक मूत हैक है जो एक बहुत ही मूल फैशन में बनावट मुद्दे को संबोधित करता है:

ggplot2: R के उपयोग से अन्य की तुलना में एक बार गहरे रंग में बॉर्डर बनाते हैं

संपादित करें: मुझे आखिरकार इस हैक का एक संक्षिप्त उदाहरण देने का समय मिला है जो ggplot2 में कम से कम 3 प्रकार के मूल पैटर्न की अनुमति देता है। कोड:

Example.Data<- data.frame(matrix(vector(), 0, 3, dimnames=list(c(), c("Value", "Variable", "Fill"))), stringsAsFactors=F)

Example.Data[1, ] <- c(45, 'Horizontal Pattern','Horizontal Pattern' )
Example.Data[2, ] <- c(65, 'Vertical Pattern','Vertical Pattern' )
Example.Data[3, ] <- c(89, 'Mesh Pattern','Mesh Pattern' )


HighlightDataVert<-Example.Data[2, ]
HighlightHorizontal<-Example.Data[1, ]
HighlightMesh<-Example.Data[3, ]
HighlightHorizontal$Value<-as.numeric(HighlightHorizontal$Value)
Example.Data$Value<-as.numeric(Example.Data$Value)

HighlightDataVert$Value<-as.numeric(HighlightDataVert$Value)
HighlightMesh$Value<-as.numeric(HighlightMesh$Value)
HighlightHorizontal$Value<-HighlightHorizontal$Value-5
HighlightHorizontal2<-HighlightHorizontal
HighlightHorizontal2$Value<-HighlightHorizontal$Value-5
HighlightHorizontal3<-HighlightHorizontal2
HighlightHorizontal3$Value<-HighlightHorizontal2$Value-5
HighlightHorizontal4<-HighlightHorizontal3
HighlightHorizontal4$Value<-HighlightHorizontal3$Value-5
HighlightHorizontal5<-HighlightHorizontal4
HighlightHorizontal5$Value<-HighlightHorizontal4$Value-5
HighlightHorizontal6<-HighlightHorizontal5
HighlightHorizontal6$Value<-HighlightHorizontal5$Value-5
HighlightHorizontal7<-HighlightHorizontal6
HighlightHorizontal7$Value<-HighlightHorizontal6$Value-5
HighlightHorizontal8<-HighlightHorizontal7
HighlightHorizontal8$Value<-HighlightHorizontal7$Value-5

HighlightMeshHoriz<-HighlightMesh
HighlightMeshHoriz$Value<-HighlightMeshHoriz$Value-5
HighlightMeshHoriz2<-HighlightMeshHoriz
HighlightMeshHoriz2$Value<-HighlightMeshHoriz2$Value-5
HighlightMeshHoriz3<-HighlightMeshHoriz2
HighlightMeshHoriz3$Value<-HighlightMeshHoriz3$Value-5
HighlightMeshHoriz4<-HighlightMeshHoriz3
HighlightMeshHoriz4$Value<-HighlightMeshHoriz4$Value-5
HighlightMeshHoriz5<-HighlightMeshHoriz4
HighlightMeshHoriz5$Value<-HighlightMeshHoriz5$Value-5
HighlightMeshHoriz6<-HighlightMeshHoriz5
HighlightMeshHoriz6$Value<-HighlightMeshHoriz6$Value-5
HighlightMeshHoriz7<-HighlightMeshHoriz6
HighlightMeshHoriz7$Value<-HighlightMeshHoriz7$Value-5
HighlightMeshHoriz8<-HighlightMeshHoriz7
HighlightMeshHoriz8$Value<-HighlightMeshHoriz8$Value-5
HighlightMeshHoriz9<-HighlightMeshHoriz8
HighlightMeshHoriz9$Value<-HighlightMeshHoriz9$Value-5
HighlightMeshHoriz10<-HighlightMeshHoriz9
HighlightMeshHoriz10$Value<-HighlightMeshHoriz10$Value-5
HighlightMeshHoriz11<-HighlightMeshHoriz10
HighlightMeshHoriz11$Value<-HighlightMeshHoriz11$Value-5
HighlightMeshHoriz12<-HighlightMeshHoriz11
HighlightMeshHoriz12$Value<-HighlightMeshHoriz12$Value-5
HighlightMeshHoriz13<-HighlightMeshHoriz12
HighlightMeshHoriz13$Value<-HighlightMeshHoriz13$Value-5
HighlightMeshHoriz14<-HighlightMeshHoriz13
HighlightMeshHoriz14$Value<-HighlightMeshHoriz14$Value-5
HighlightMeshHoriz15<-HighlightMeshHoriz14
HighlightMeshHoriz15$Value<-HighlightMeshHoriz15$Value-5
HighlightMeshHoriz16<-HighlightMeshHoriz15
HighlightMeshHoriz16$Value<-HighlightMeshHoriz16$Value-5
HighlightMeshHoriz17<-HighlightMeshHoriz16
HighlightMeshHoriz17$Value<-HighlightMeshHoriz17$Value-5

ggplot(Example.Data, aes(x=Variable, y=Value, fill=Fill)) + theme_bw() + #facet_wrap(~Product, nrow=1)+ #Ensure theme_bw are there to create borders
  theme(legend.position = "none")+
  scale_fill_grey(start=.4)+
  #scale_y_continuous(limits = c(0, 100), breaks = (seq(0,100,by = 10)))+
  geom_bar(position=position_dodge(.9), stat="identity", colour="black", legend = FALSE)+
  geom_bar(data=HighlightDataVert, position=position_dodge(.9), stat="identity", colour="black", size=.5, width=0.80)+
geom_bar(data=HighlightDataVert, position=position_dodge(.9), stat="identity", colour="black", size=.5, width=0.60)+  
  geom_bar(data=HighlightDataVert, position=position_dodge(.9), stat="identity", colour="black", size=.5, width=0.40)+
  geom_bar(data=HighlightDataVert, position=position_dodge(.9), stat="identity", colour="black", size=.5, width=0.20)+
  geom_bar(data=HighlightDataVert, position=position_dodge(.9), stat="identity", colour="black", size=.5, width=0.0) +
  geom_bar(data=HighlightHorizontal, position=position_dodge(.9), stat="identity", colour="black", size=.5)+
  geom_bar(data=HighlightHorizontal2, position=position_dodge(.9), stat="identity", colour="black", size=.5)+
  geom_bar(data=HighlightHorizontal3, position=position_dodge(.9), stat="identity", colour="black", size=.5)+
  geom_bar(data=HighlightHorizontal4, position=position_dodge(.9), stat="identity", colour="black", size=.5)+
  geom_bar(data=HighlightHorizontal5, position=position_dodge(.9), stat="identity", colour="black", size=.5)+
  geom_bar(data=HighlightHorizontal6, position=position_dodge(.9), stat="identity", colour="black", size=.5)+
  geom_bar(data=HighlightHorizontal7, position=position_dodge(.9), stat="identity", colour="black", size=.5)+
  geom_bar(data=HighlightHorizontal8, position=position_dodge(.9), stat="identity", colour="black", size=.5)+
  geom_bar(data=HighlightMesh, position=position_dodge(.9), stat="identity", colour="black", size=.5, width=0.80)+
 geom_bar(data=HighlightMesh, position=position_dodge(.9), stat="identity", colour="black", size=.5, width=0.60)+
  geom_bar(data=HighlightMesh, position=position_dodge(.9), stat="identity", colour="black", size=.5, width=0.40)+
  geom_bar(data=HighlightMesh, position=position_dodge(.9), stat="identity", colour="black", size=.5, width=0.20)+
  geom_bar(data=HighlightMesh, position=position_dodge(.9), stat="identity", colour="black", size=.5, width=0.0)+
  geom_bar(data=HighlightMeshHoriz, position=position_dodge(.9), stat="identity", colour="black", size=.5, fill = "transparent")+
geom_bar(data=HighlightMeshHoriz2, position=position_dodge(.9), stat="identity", colour="black", size=.5, fill = "transparent")+
  geom_bar(data=HighlightMeshHoriz3, position=position_dodge(.9), stat="identity", colour="black", size=.5, fill = "transparent")+
  geom_bar(data=HighlightMeshHoriz4, position=position_dodge(.9), stat="identity", colour="black", size=.5, fill = "transparent")+
  geom_bar(data=HighlightMeshHoriz5, position=position_dodge(.9), stat="identity", colour="black", size=.5, fill = "transparent")+
  geom_bar(data=HighlightMeshHoriz6, position=position_dodge(.9), stat="identity", colour="black", size=.5, fill = "transparent")+
  geom_bar(data=HighlightMeshHoriz7, position=position_dodge(.9), stat="identity", colour="black", size=.5, fill = "transparent")+
  geom_bar(data=HighlightMeshHoriz8, position=position_dodge(.9), stat="identity", colour="black", size=.5, fill = "transparent")+
  geom_bar(data=HighlightMeshHoriz9, position=position_dodge(.9), stat="identity", colour="black", size=.5, fill = "transparent")+
  geom_bar(data=HighlightMeshHoriz10, position=position_dodge(.9), stat="identity", colour="black", size=.5, fill = "transparent")+
  geom_bar(data=HighlightMeshHoriz11, position=position_dodge(.9), stat="identity", colour="black", size=.5, fill = "transparent")+
  geom_bar(data=HighlightMeshHoriz12, position=position_dodge(.9), stat="identity", colour="black", size=.5, fill = "transparent")+
  geom_bar(data=HighlightMeshHoriz13, position=position_dodge(.9), stat="identity", colour="black", size=.5, fill = "transparent")+
  geom_bar(data=HighlightMeshHoriz14, position=position_dodge(.9), stat="identity", colour="black", size=.5, fill = "transparent")+
  geom_bar(data=HighlightMeshHoriz15, position=position_dodge(.9), stat="identity", colour="black", size=.5, fill = "transparent")+
  geom_bar(data=HighlightMeshHoriz16, position=position_dodge(.9), stat="identity", colour="black", size=.5, fill = "transparent")+
  geom_bar(data=HighlightMeshHoriz17, position=position_dodge(.9), stat="identity", colour="black", size=.5, fill = "transparent")

इसका उत्पादन करता है:

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

यह सुपर सुंदर नहीं है, लेकिन यह एकमात्र समाधान है जिस पर मैं सोच सकता हूं।

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

इसी तरह की बात क्षैतिज रेखाओं के लिए की जाती है, लेकिन प्रत्येक रीड्रा के लिए एक नए डेटा फ्रेम की आवश्यकता होती है, जहां मैंने ब्याज के चर के साथ जुड़े मूल्य से एक मूल्य (मेरे उदाहरण में '5') घटाया है। प्रभावी रूप से बार की ऊंचाई कम करना। यह प्राप्त करने के लिए क्लिंकी है और अधिक सुव्यवस्थित दृष्टिकोण हो सकते हैं लेकिन यह दर्शाता है कि इसे कैसे प्राप्त किया जा सकता है।

मेष पैटर्न दोनों का एक संयोजन है। सबसे पहले खड़ी लाइनों आकर्षित और फिर क्षैतिज लाइनों की स्थापना को जोड़ने fillके रूप में fill='transparent'सुनिश्चित करने के लिए खड़ी लाइनों पर तैयार नहीं हैं।

जब तक एक पैटर्न अपडेट नहीं होता है, मुझे उम्मीद है कि आप में से कुछ इसे उपयोगी पाएंगे।

संपादित करें 2:

इसके अतिरिक्त विकर्ण पैटर्न भी जोड़े जा सकते हैं। मैंने डेटा फ़्रेम में एक अतिरिक्त चर जोड़ा:

Example.Data[4,] <- c(20, 'Diagonal Pattern','Diagonal Pattern' )

तब मैंने विकर्ण लाइनों के लिए निर्देशांक रखने के लिए एक नया डेटा फ्रेम बनाया:

Diag <- data.frame(
  x = c(1,1,1.45,1.45), # 1st 2 values dictate starting point of line. 2nd 2 dictate width. Each whole = one background grid
  y = c(0,0,20,20),
  x2 = c(1.2,1.2,1.45,1.45), # 1st 2 values dictate starting point of line. 2nd 2 dictate width. Each whole = one background grid
  y2 = c(0,0,11.5,11.5),# inner 2 values dictate height of horizontal line. Outer: vertical edge lines.
  x3 = c(1.38,1.38,1.45,1.45), # 1st 2 values dictate starting point of line. 2nd 2 dictate width. Each whole = one background grid
  y3 = c(0,0,3.5,3.5),# inner 2 values dictate height of horizontal line. Outer: vertical edge lines.
  x4 = c(.8,.8,1.26,1.26), # 1st 2 values dictate starting point of line. 2nd 2 dictate width. Each whole = one background grid
  y4 = c(0,0,20,20),# inner 2 values dictate height of horizontal line. Outer: vertical edge lines.
  x5 = c(.6,.6,1.07,1.07), # 1st 2 values dictate starting point of line. 2nd 2 dictate width. Each whole = one background grid
  y5 = c(0,0,20,20),# inner 2 values dictate height of horizontal line. Outer: vertical edge lines.
  x6 = c(.555,.555,.88,.88), # 1st 2 values dictate starting point of line. 2nd 2 dictate width. Each whole = one background grid
  y6 = c(6,6,20,20),# inner 2 values dictate height of horizontal line. Outer: vertical edge lines.
  x7 = c(.555,.555,.72,.72), # 1st 2 values dictate starting point of line. 2nd 2 dictate width. Each whole = one background grid
  y7 = c(13,13,20,20),# inner 2 values dictate height of horizontal line. Outer: vertical edge lines.
  x8 = c(.8,.8,1.26,1.26), # 1st 2 values dictate starting point of line. 2nd 2 dictate width. Each whole = one background grid
  y8 = c(0,0,20,20),# inner 2 values dictate height of horizontal line. Outer: vertical edge lines.
  #Variable = "Diagonal Pattern",
  Fill = "Diagonal Pattern"
  )

वहाँ से मैंने geom_paths को जोड़ दिया ऊपर ggplot में, हर एक को अलग-अलग निर्देशांक कहते हैं और वांछित पट्टी पर रेखाएँ खींचते हैं:

+geom_path(data=Diag, aes(x=x, y=y),colour = "black")+  # calls co-or for sig. line & draws
  geom_path(data=Diag, aes(x=x2, y=y2),colour = "black")+  # calls co-or for sig. line & draws
  geom_path(data=Diag, aes(x=x3, y=y3),colour = "black")+
  geom_path(data=Diag, aes(x=x4, y=y4),colour = "black")+
  geom_path(data=Diag, aes(x=x5, y=y5),colour = "black")+
  geom_path(data=Diag, aes(x=x6, y=y6),colour = "black")+
  geom_path(data=Diag, aes(x=x7, y=y7),colour = "black")

यह निम्नलिखित में परिणाम:

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

यह थोड़ा टेढ़ा है क्योंकि मैंने लाइनों को पूरी तरह से एंगल्ड होने और अलग-अलग होने में बहुत अधिक समय का निवेश नहीं किया है, लेकिन यह अवधारणा के प्रमाण के रूप में काम करना चाहिए।

स्पष्ट रूप से लाइनें विपरीत दिशा को झुका सकती हैं और क्षैतिज और ऊर्ध्वाधर मेशिंग की तरह विकर्ण जाल के लिए भी जगह है।

मुझे लगता है कि इस बारे में मैं पैटर्न के मोर्चे पर पेशकश कर सकता हूं। आशा है कि कोई इसके लिए उपयोग पा सकता है।

EDIT 3: अंतिम अंतिम शब्द। मैं एक और पैटर्न विकल्प के साथ आया हूं। इस समय का उपयोग कर geom_jitter

फिर से मैंने डेटा फ्रेम में एक और चर जोड़ा:

Example.Data[5,] <- c(100, 'Bubble Pattern','Bubble Pattern' )

और मैंने आदेश दिया कि मैं कैसे प्रत्येक पैटर्न प्रस्तुत करना चाहता था:

Example.Data$Variable = Relevel(Example.Data$Variable, ref = c("Diagonal Pattern", "Bubble Pattern","Horizontal Pattern","Mesh Pattern","Vertical Pattern"))

आगे मैंने x- अक्ष पर इच्छित लक्ष्य पट्टी से जुड़ी संख्या को समाहित करने के लिए एक कॉलम बनाया:

Example.Data$Bubbles <- 2

'बुलबुले' के y- अक्ष पर स्थितियाँ रखने के लिए स्तंभों का अनुसरण:

Example.Data$Points <- c(5, 10, 15, 20, 25)
Example.Data$Points2 <- c(30, 35, 40, 45, 50)
Example.Data$Points3 <- c(55, 60, 65, 70, 75)
Example.Data$Points4 <- c(80, 85, 90, 95, 7)
Example.Data$Points5 <- c(14, 21, 28, 35, 42)
Example.Data$Points6 <- c(49, 56, 63, 71, 78)
Example.Data$Points7 <- c(84, 91, 98, 6, 12)

अंत में मैंने geom_jitterस्थिति के लिए नए कॉलम का उपयोग करने के लिए ऊपर ggplot में जोड़ा और 'बुलबुले' के आकार को अलग करने के लिए 'पॉइंट्स' का फिर से उपयोग किया:

+geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points, size=Points), alpha=.5)+
  geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points2, size=Points), alpha=.5)+
  geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points, size=Points), alpha=.5)+
  geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points2, size=Points), alpha=.5)+
  geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points3, size=Points), alpha=.5)+
  geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points4, size=Points), alpha=.5)+
  geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points, size=Points), alpha=.5)+
  geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points2, size=Points), alpha=.5)+
  geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points, size=Points), alpha=.5)+
  geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points2, size=Points), alpha=.5)+
  geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points3, size=Points), alpha=.5)+
  geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points4, size=Points), alpha=.5)+
  geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points2, size=Points), alpha=.5)+
  geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points5, size=Points), alpha=.5)+
  geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points5, size=Points), alpha=.5)+
  geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points6, size=Points), alpha=.5)+
  geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points6, size=Points), alpha=.5)+
  geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points7, size=Points), alpha=.5)+
  geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points7, size=Points), alpha=.5)+
  geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points, size=Points), alpha=.5)+
  geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points2, size=Points), alpha=.5)+
  geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points, size=Points), alpha=.5)+
  geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points2, size=Points), alpha=.5)+
  geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points3, size=Points), alpha=.5)+
  geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points4, size=Points), alpha=.5)+
  geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points, size=Points), alpha=.5)+
  geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points2, size=Points), alpha=.5)+
  geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points, size=Points), alpha=.5)+
  geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points2, size=Points), alpha=.5)+
  geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points3, size=Points), alpha=.5)+
  geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points4, size=Points), alpha=.5)+
  geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points2, size=Points), alpha=.5)+
  geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points5, size=Points), alpha=.5)+
  geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points5, size=Points), alpha=.5)+
  geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points6, size=Points), alpha=.5)+
  geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points6, size=Points), alpha=.5)+
  geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points7, size=Points), alpha=.5)+
  geom_jitter(data=Example.Data,aes(x=Bubbles, y=Points7, size=Points), alpha=.5)

हर बार साजिश को अलग-अलग तरीके से 'बुलबुले' के रूप में चलाया जाता है, लेकिन यहां मेरे द्वारा किए गए अच्छे आउटपुट में से एक है:

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

कभी-कभी 'बुलबुले' सीमाओं के बाहर घबराना होगा। यदि ऐसा होता है तो पुनर्मिलन या बस बड़े आयामों में निर्यात करें। Y- अक्ष पर प्रत्येक वृद्धि पर अधिक बुलबुले लगाए जा सकते हैं जो कि आपकी इच्छा के अनुसार रिक्त स्थान को अधिक भर देंगे।

यह 7 पैटर्न बनाता है (यदि आप विपरीत झुकाव वाली विकर्ण रेखाओं और दोनों के विकर्ण जाल को शामिल करते हैं) जिसे ggplot में हैक किया जा सकता है।

कृपया बेझिझक और अधिक सुझाव दे सकते हैं यदि कोई कुछ सोच सकता है।

संपादित 4: मैं ggplot2 में हैचिंग / पैटर्न को स्वचालित करने के लिए एक रैपर फ़ंक्शन पर काम कर रहा हूं। एक बार जब मैंने फंक्शन_ग्रिड प्लॉटों में पैटर्न की अनुमति देने के लिए फ़ंक्शन का विस्तार किया है, तो मैं एक लिंक पोस्ट करूंगा। यहां उदाहरण के रूप में सलाखों के सरल भूखंड के लिए फ़ंक्शन इनपुट के साथ एक आउटपुट है:

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

एक बार जब मैं फ़ंक्शन साझा करने के लिए तैयार हो जाता हूं, तो मैं एक अंतिम संपादन जोड़ूंगा।

EDIT 5: यहां एग्जाम एगहैच का लिंक दिया गया है, जिसे मैंने geom_bar प्लॉट्स में पैटर्न जोड़ने की प्रक्रिया को थोड़ा आसान बनाने के लिए लिखा था।


बहुत बढ़िया! हालांकि, ऐसा लगता है कि यह समाधान केवल बार भूखंडों के लिए काम करता है या?
स्काईवॉकर

@ गिवानी अज़ुआ मैंने केवल बार-प्लॉट्स के लिए कोशिश की है। जब मुझे समय मिल जाएगा तो मैं कोशिश करूँगा और स्टैक्ड प्लॉट्स इत्यादि के लिए लिंक किए गए फंक्शन को अनुकूलित करूँगा
Docconcoct

70

यह वर्तमान में संभव नहीं है क्योंकि ग्रिड (ग्राफिक्स सिस्टम जो वास्तविक ड्राइंग करने के लिए ggplot2 का उपयोग करता है) बनावट का समर्थन नहीं करता है। माफ़ करना!


70
इस कार्यक्षमता को प्राप्त करने के लिए किसी निर्भरता के रूप में ग्राइडेक्स्रा को जोड़ने की कोई योजना है?
रुसेलपिएर्स

इसके बारे में कोई ख़बर?
Hrant

यह भविष्य में इतना दूर नहीं बदल सकता है। इस चर्चा को देखें , R के ग्रिड पैकेज में आने वाले बदलावों के बारे में
स्ट्रैगु

21

आप टेक्सचर्ड आयतों और बार को खींचने के लिए @claus wilke द्वारा ggtextures पैकेज का उपयोग कर सकते हैं ।ggplot2

# Image/pattern randomly selected from README
path_image <- "http://www.hypergridbusiness.com/wp-content/uploads/2012/12/rocks2-256.jpg"

library(ggplot2)
# devtools::install_github("clauswilke/ggtextures")
ggplot(mtcars, aes(cyl, mpg)) + 
  ggtextures::geom_textured_bar(stat = "identity", image = path_image)

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

आप इसे अन्य जियोम्स के साथ भी जोड़ सकते हैं:

data_raw <- data.frame(x = round(rbinom(1000, 50, 0.1)))
ggplot(data_raw, aes(x)) +
  geom_textured_bar(
    aes(y = ..prop..), image = path_image
  ) +
  geom_density()

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


2
अपना उत्तर @PoGibas स्थानांतरित करने के लिए धन्यवाद। मैं शर्त लगाता हूं कि इसे यहां अधिक (अच्छी तरह से योग्य) ध्यान मिलेगा! चीयर्स
हेनरिक

बहुत अच्छा समाधान।
डॉकोनोक्ट

4
यहां डाउनलोड करने योग्य पैटर्न देखें: heropatterns.com
Nova

अब मुझे सिर्फ यह पता लगाने की जरूरत है कि
Nova



2

मैंने अभी-अभी ggpattern( https://github.com/coolbutuseless/ggpattern ) नामक पैकेज की खोज की है जो इस समस्या का अच्छा समाधान प्रतीत होता है और ggplot2 वर्कफ़्लो के साथ अच्छी तरह से एकीकृत होता है। जबकि बनावट का उपयोग करने वाले समाधान विकर्ण सलाखों के लिए ठीक काम कर सकते हैं, वे वेक्टर ग्राफिक्स का उत्पादन नहीं करेंगे और इसलिए इष्टतम नहीं हैं।

यहाँ एक उदाहरण सीधे ggpattern के गितुब भंडार से लिया गया है:

install.packages("remotes")
remotes::install_github("coolbutuseless/ggpattern")

library(ggplot2)
library(ggpattern)

df <- data.frame(level = c("a", "b", "c", 'd'), outcome = c(2.3, 1.9, 3.2, 1))

ggplot(df) +
  geom_col_pattern(
    aes(level, outcome, pattern_fill = level), 
    pattern = 'stripe',
    fill    = 'white',
    colour  = 'black'
  ) +
  theme_bw(18) +
  theme(legend.position = 'none') + 
  labs(
    title    = "ggpattern::geom_pattern_col()",
    subtitle = "pattern = 'stripe'"
  ) +
  coord_fixed(ratio = 1/2)

इस साजिश में कौन से परिणाम हैं:

ggpattern उदाहरण प्लॉट

यदि केवल कुछ पट्टियों को धारीदार किया जाना चाहिए, तो geom_col_pattern()एक pattern_alphaतर्क है कि कुछ अवांछित धारियों को पूरी तरह से पारदर्शी बनाने के लिए इस्तेमाल किया जा सकता है।


1

यह एक डमी डेटा फ्रेम बनाने के लिए उपयोगी हो सकता है, जिसका कंट्रोस "टेक्सचर्स" के अनुरूप होता है और फिर geom_contour का उपयोग करते हैं। यहाँ मेरा उदाहरण है:

library(ggplot2)

eg = expand.grid(R1 = seq(0,1,by=0.01), R2 = seq(0,1,by=0.01))
     eg$importance = (eg$R1+eg$R2)/2

  ggplot(eg , aes(x = R1, y = R2)) +
  geom_raster(aes(fill = importance), interpolate=TRUE) +
  scale_fill_gradient2(low="white", high="gray20", limits=c(0,1)) +
  theme_classic()+
  geom_contour(bins=5,aes(z=importance), color="black", size=0.6)+
  coord_fixed(ratio = 1, xlim=c(0,1),ylim=c(0,1))

और यहां परिणाम है: लाइनों के साथ छायांकित भूखंड

(लाइनों को सुचारू किया जाना चाहिए)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.