2013-01-11 10 views
9

मैं matplotlib.pyplot.bar() और matplotlib.pyplot.pie() का उपयोग करके कई बार और पाई चार्ट चित्रित कर रहा हूं। दोनों कार्यों में, मैं सलाखों और wedges के रंग बदल सकते हैं।मैं अपने सलाखों और वेजेज़ में बनावट कैसे जोड़ सकता हूं?

हालांकि, मुझे इन चार्टों को काले और सफेद रंग में प्रिंट करने की आवश्यकता है। यह Line2D मार्कर प्रॉपर्टी के समान बार और वेजेज़ पर बनावट रखने में सक्षम होने के लिए और अधिक उपयोगी होगा जो रेखाचित्रों के लिए उपलब्ध है। क्या मैं इन मार्करों के साथ लगातार सलाखों और सलाखों को भर सकता हूं? या ऐसा कुछ हासिल करने का कोई और तरीका है? http://matplotlib.org/examples/pylab_examples/hatch_demo.html:

उत्तर

16

bar() के साथ, आप सीधे (कुछ बैकेंड के साथ) hatches उपयोग कर सकते हैं bar plot with hatches

यह bar() करने के लिए अपने कॉल करने के लिए hatch तर्क जोड़कर काम करता है।


pie() का सवाल है, यह एक hatch कीवर्ड नहीं है। आप के बजाय अलग-अलग पाई चार्ट पैच मिलता है और उन्हें hatches जोड़ सकते हैं: आप के साथ पैच प्राप्त:

patches[0].set_hatch('/') # Pie slice #0 hatched. 

(hatches सूची:

patches = pie(…)[0] # The first element of the returned tuple are the pie slices 

तो आप hatches प्रत्येक टुकड़ा करने के लिए (पैच) लागू http://matplotlib.org/api/artist_api.html#matplotlib.patches.Patch.set_hatch पर)।

और आप के साथ परिवर्तनों को लागू:

pyplot.draw() 

Hatched pie chart]

+1

बहुत बढ़िया! मैं कभी अपने आप पर इतनी तेजी से नहीं पाया होता। आपका बहुत बहुत धन्यवाद! :) – pemistahl

19
import matplotlib.pyplot as plt 

fig = plt.figure() 

patterns = [ "/" , "\\" , "|" , "-" , "+" , "x", "o", "O", ".", "*" ] 

ax1 = fig.add_subplot(111) 
for i in range(len(patterns)): 
    ax1.bar(i, 3, color='red', edgecolor='black', hatch=patterns[i]) 


plt.show() 

enter image description here

यह प्रलेखन यहाँ है:

http://matplotlib.org/api/artist_api.html#matplotlib.patches.Patch.set_hatch

-

ठीक है तो एक piechart संरचना करने के लिए, यदि आप ऐसा करने की जरूरत है:

अगर आप here देखो:

Return value: 
If autopct is None, return the tuple (patches, texts): 

patches is a sequence of matplotlib.patches.Wedge instances 
texts is a list of the label matplotlib.text.Text instances. 

तो फिर हम Wedges पृष्ठ पर देखें, और देखें कि यह एक set_hatch है () तरीका।

इसलिए हमें केवल पाइचार्ट डेमो में कुछ पंक्तियां जोड़ने की आवश्यकता है और ...

उदाहरण 1:

import matplotlib.pyplot as plt 

fig = plt.figure() 

patterns = [ "/" , "\\" , "|" , "-" , "+" , "x", "o", "O", ".", "*" ] 

ax1 = fig.add_subplot(111) 
for i in range(len(patterns)): 
    ax1.bar(i, 3, color='red', edgecolor='black', hatch=patterns[i]) 


plt.show() 

उदाहरण 2:

""" 
Make a pie chart - see 
http://matplotlib.sf.net/matplotlib.pylab.html#-pie for the docstring. 

This example shows a basic pie chart with labels optional features, 
like autolabeling the percentage, offsetting a slice with "explode", 
adding a shadow, and changing the starting angle. 

""" 

from pylab import * 
import math 
import numpy as np 

patterns = [ "/" , "\\" , "|" , "-" , "+" , "x", "o", "O", ".", "*" ] 


def little_pie(breakdown,location,size): 
    breakdown = [0] + list(np.cumsum(breakdown)* 1.0/sum(breakdown)) 
    for i in xrange(len(breakdown)-1): 
     x = [0] + np.cos(np.linspace(2 * math.pi * breakdown[i], 2 * math.pi *  
          breakdown[i+1], 20)).tolist() 
     y = [0] + np.sin(np.linspace(2 * math.pi * breakdown[i], 2 * math.pi * 
          breakdown[i+1], 20)).tolist() 
     xy = zip(x,y) 
     scatter(location[0], location[1], marker=(xy,0), s=size, facecolor= 
       ['gold','yellow', 'orange', 'red','purple','indigo','violet'][i%7]) 

figure(1, figsize=(6,6)) 

little_pie([10,3,7],(1,1),600) 
little_pie([10,27,4,8,4,5,6,17,33],(-1,1),800) 

fracs = [10, 8, 7, 10] 
explode=(0, 0, 0.1, 0) 

piechart = pie(fracs, explode=explode, autopct='%1.1f%%') 
for i in range(len(piechart[0])): 
    piechart[0][i].set_hatch(patterns[(i)%len(patterns)]) 


show() 

enter image description here

+0

धन्यवाद। :) और मैं पाई वेजेस के लिए यह कैसे करूँ? – pemistahl

+0

@ पीटरस्टहल - क्षमा करें, मैंने कभी भी पाई चार्ट का उपयोग नहीं किया है। set_hatch कलाकार के लिए एक विधि है हालांकि, आप इसे प्रत्येक स्लाइस के लिए कलाकार प्राप्त करने में सक्षम होना चाहिए। – will

+0

@ पीटर स्टाह ठीक है, इसे करने का एक तरीका काम किया। – will

संबंधित मुद्दे

 संबंधित मुद्दे