2014-05-08 7 views
8

ऐसा लगता है कि पीसीओएलओआर मेरे डेटा सेट की आखिरी पंक्ति और कॉलम को बंद कर रहा है। zi के आकार को प्रिंट करने से पता चलता है कि यह Data set.(22,22) है, जैसा कि मुझे उम्मीद है, लेकिन 21 वर्गों द्वारा 21 वर्गों का एक क्षेत्र दिखाया गया है ... कोई विचार क्यों अंतिम पंक्ति और कॉलम प्लॉट नहीं किया जा रहा है?Matplotlib: pcolor() पिछली पंक्ति और कॉलम प्लॉट नहीं करता है?

def pcolor_probs(x,y,z, x_str, y_str, t_str): 
    xi = np.arange(min(x),max(x)+1, 1) 
    yi = np.arange(min(y),max(y)+1, 1) 
    zi = griddata(x,y,z,xi,yi) 
    print np.shape(xi),np.shape(yi),np.shape(zi) 

    # fix NANs 
    zi = np.asarray(zi) 
    for i in range(len(zi)): 
     for j in range(len(zi[i])): 
      print i,j 
      if isnan(float(zi[i][j])): 
       zi[i][j] = 0 

    # plot 
    f = figure() 
    ax = f.add_subplot(111) 
    pc_plot = ax.pcolor(zi, cmap = cm.coolwarm, shading = 'faceted', alpha = 0.75) 
    # pc_plot = ax.contourf(zi, 20, cmap = cm.coolwarm, alpha = 0.75) 
    ax.set_xticks(np.arange(zi.shape[0])+0.5, minor=False) 
    ax.set_yticks(np.arange(zi.shape[1])+0.5, minor=False) 
    ax.set_xticklabels(np.arange(len(xi))) 
    ax.set_yticklabels(np.arange(len(yi))) 
    ax.set_xlim(min(x), max(x)) 
    ax.set_ylim(min(y), max(y)) 
    ax.set_xlabel(x_str) 
    ax.set_ylabel(y_str) 
    ax.set_title(t_str) 
    f.colorbar(pc_plot) 


    f.set_tight_layout(True) 
    font = {'family' : 'serif','weight' : 'regular','size' : 12} 
    matplotlib.rc('font', **font) 
    show() 

की यह और भी आसान करते हैं,

X = np.random.rand(10,10) 
pcolor(X) 
show() 

उत्पन्न करता है,

enter image description here

उत्तर

4

कारण कोने पर कि pcolor मायने रखता अंक है। वास्तव में, 22 और 10 शिखर हैं। इसके बजाय imshow(...,extent[]) का उपयोग करें।

+1

कृपया रंगीन दस्तावेज़ों के लिए एक लिंक जोड़ें। – tacaswell

2

थोड़ा देर हो चुकी है, लेकिन केवल एक एक्स और वाई तर्क प्रदान करता है जिसका आकार केवल 1 (दोनों दिशाओं में) से बड़ा होता है, संपूर्ण सरणी प्रदर्शित करेगा।

कुछ उदाहरण bellow की तरह:

import numpy as np 
import matplotlib.pyplot as plt 

#define the space limits: 
horizontal_min = -2. 
horizontal_max = 2. 
horizontal_step = 0.1 
vertical_min = -1. 
vertical_max = 1. 
vertical_step = 0.2 

# create the arrays 
nx = (horizontal_max - horizontal_min)/horizontal_step 
ny = (vertical_max - vertical_min)/vertical_step 
Z = np.zeros((nx,ny)) 
Y,X = np.meshgrid(np.arange(vertical_min, 
          vertical_max+vertical_step, # THIS LINE... 
          vertical_step), 
        np.arange(horizontal_min, 
          horizontal_max+horizontal_step, # ...& THIS LINE 
          horizontal_step) 
       ) 
Y2,X2 = np.meshgrid(np.arange(vertical_min, 
           vertical_max, # THIS LINE... 
           vertical_step), 
        np.arange(horizontal_min, 
           horizontal_max, # ...& THIS LINE 
           horizontal_step) 
        )    

# populate the data array (Z) 
i  = 0 
if nx > ny: 
    while i < ny: 
     Z[i,i]  = i+1 
     Z[nx-i-1,i] = -i-1 
     i   += 1 
else: 
    while i < ny: 
     Z[i,i]  = i+1 
     Z[i,ny-i-1] = -i-1 
     i   += 1 


# make the graph 
fig,axes  = plt.subplots(2,1) 
pc_plot1 = axes[0].pcolor(X, Y, Z) 
axes[0].set_title('X.shape == Y.shape != Z.shape') 
pc_plot2 = axes[1].pcolor(X2, Y2, Z) 
axes[1].set_title('X.shape == Y.shape == Z.shape') 
for ax in axes: 
    ax.axis('equal') 
    ax.set_xlim(horizontal_min, horizontal_max) 
    ax.set_ylim(vertical_min, vertical_max) 
fig.tight_layout() 
fig.show() 

enter image description here सूचना लाइनों THIS LINE के साथ चिह्नित।

>>> print X.shape,Y.shape,Z.shape 
(41, 11) (41, 11) (40, 10) 

(दिए गए उदाहरण के लिए)

बस एक छोटा सा ध्यान दें, Y,X = np.meshgrid... जेड स्थानांतरित करने के लिए (official documentation देखें) होने की जगह का उपयोग कर: क्या वे मतलब है कि है।

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