2012-02-24 15 views
5

मैटप्लॉटलिब में bar3d() का उपयोग कर पाइथन में एक 3 डी बार हिस्टोग्राम बनाने की कोशिश कर रहा हूं।पायथन matplotlib -> 3 डी बार साजिश -> टिक लेबल स्थिति समायोजित, पारदर्शी सलाखों

मैं बिंदु जहां मैं इसे कुछ डेटा पास करने के बाद स्क्रीन पर मेरी हिस्टोग्राम प्रदर्शित कर सकते हैं मिल गया है, लेकिन मैं निम्नलिखित पर अटक कर रहा हूँ:

  1. प्रदर्शित कुल्हाड़ियों लेबल सही ढंग से (वर्तमान में अंतिम चूक जाता है (या प्रारंभिक?) टिक लेबल)
  2. या तो प्रत्येक अक्ष पर टिक बनाने (उदाहरण के लिए 'सोम' के लिए) या तो इसके संबंधित ब्लू बार को इंगित करें, या प्रमुख टिक अंकों के बीच टिक लेबल को स्थिति दें।
  3. सलाखों को सेमी-पारदर्शी बनाना।

image of plot uploaded here

मैं 'कुल्हाड़ी' उदाहरण के लिए कई अलग अलग तर्क गुजर की कोशिश की है, लेकिन बावजूद काम करने के लिए कुछ भी नहीं मिला है और संदेह है कि मैं क्या इसके साथ प्रदान करने के लिए गलत समझा है। मैं इस पर किसी भी मदद के लिए बहुत आभारी रहूंगा।

from mpl_toolkits.mplot3d import Axes3D 
import matplotlib.pyplot as plt 
import numpy as np 

#from IPython.Shell import IPShellEmbed 
#sh = IPShellEmbed() 

data = np.array([ 
[0,1,0,2,0], 
[0,3,0,2,0], 
[6,1,1,7,0], 
[0,5,0,2,9], 
[0,1,0,4,0], 
[9,1,3,4,2], 
[0,0,2,1,3], 
]) 

column_names = ['a','b','c','d','e'] 
row_names = ['Mon','Tue','Wed','Thu','Fri','Sat','Sun'] 

fig = plt.figure() 
ax = Axes3D(fig) 

lx= len(data[0])   # Work out matrix dimensions 
ly= len(data[:,0]) 
xpos = np.arange(0,lx,1) # Set up a mesh of positions 
ypos = np.arange(0,ly,1) 
xpos, ypos = np.meshgrid(xpos+0.25, ypos+0.25) 

xpos = xpos.flatten() # Convert positions to 1D array 
ypos = ypos.flatten() 
zpos = np.zeros(lx*ly) 

dx = 0.5 * np.ones_like(zpos) 
dy = dx.copy() 
dz = data.flatten() 

ax.bar3d(xpos,ypos,zpos, dx, dy, dz, color='b') 

#sh() 
ax.w_xaxis.set_ticklabels(column_names) 
ax.w_yaxis.set_ticklabels(row_names) 
ax.set_xlabel('Letter') 
ax.set_ylabel('Day') 
ax.set_zlabel('Occurrence') 

plt.show() 

उत्तर

7

सलाखों अर्द्ध पारदर्शी बनाने के लिए, तुम सिर्फ अल्फा पैरामीटर का उपयोग करने के लिए है:

यहाँ कोड मैं पर काम कर रहा हूँ का एक नमूना है। अल्फा = 0 का मतलब 100% पारदर्शी है, जबकि अल्फा = 1 (डिफ़ॉल्ट) का मतलब 0% पारदर्शी है।

इस प्रयास करें, यह अर्द्ध पारदर्शी सलाखों बनाने के लिए बाहर काम करेंगे:

ax.bar3d(xpos,ypos,zpos, dx, dy, dz, color='b', alpha=0.5) 

टिक स्थान के बारे में, आप यह कुछ इस तरह (plt.xticks या plt पर पहली सूची का उपयोग कर सकते हैं। yticks "मूल्यों" जहां टिक पता लगाने के लिए चाहते हो शामिल है, और दूसरी सूची में शामिल है कि क्या आप वास्तव में टिक) कॉल करना चाहते हैं: enter image description here

:

#ax.w_xaxis.set_ticklabels(column_names) 
#ax.w_yaxis.set_ticklabels(row_names) 

ticksx = np.arange(0.5, 5, 1) 
plt.xticks(ticksx, column_names) 

ticksy = np.arange(0.6, 7, 1) 
plt.yticks(ticksy, row_names) 

अंत में, मैं यह आंकड़ा प्राप्त

+0

हाय, आपके सुझाव के लिए धन्यवाद। मैं अल्फा तर्क का उपयोग करने की कोशिश की है, लेकिन निम्न त्रुटि प्राप्त: ax.bar3d में 'फ़ाइल" matrix_to_3D_histogram.py ", रेखा 43, (xpos, ypos, zpos, dx, उप, dz, color = 'ख ', अल्फा = 0.5) टाइप एरर: bar3d() को एक अप्रत्याशित कीवर्ड तर्क' अल्फा ' – Dman

+0

मिला है यह अजीब है, मुझे कोई समस्या नहीं है, और मैंने अभी आपके कोड की प्रतिलिपि बनाई है और मैंने जो पंक्ति आपको बताया है उसे बदल दिया है। आप किस संस्करण का उपयोग कर रहे हैं? मैं matplotlib 1.1.0 का उपयोग कर रहा हूँ। – carla

+0

@Dan matplotlib के संस्करण का परीक्षण करने के लिए यह टाइप करें: 'matplotlib आयात करें; प्रिंट matplotlib .__ संस्करण__' – Hooked

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