2014-08-30 6 views
0

Я только что начал использовать python и попробовал написать небольшую программу для создания простых 2D-графиков. Я пытаюсь построить 2D-матрицу (60x60). Все работает отлично, за исключением дополнительного элемента в (x = 28, y = 60), включенных в мой сюжет.2D-график с matplotlib

У меня были некоторые проблемы с выяснением того, что могло произойти не так. К сожалению, из-за моих скромных знаний о python я действительно не нашел сколько-нибудь значимого объяснения.

код я использую

  import matplotlib.pyplot as plt 
     import matplotlib as mpl 
     import numpy as np 
     from subprocess import call 

     from math import pi 

     import sys 

     x = [] 
     y = [] 
     z = [] 

     if len(sys.argv) > 1: 
      fname = sys.argv[1] 
     else: 
      fname = 'data.txt' 

     print 'reading data from {}'.format(fname) 
     print 'This is the correct verssion trimming the blanks' 
     for l in open(fname, 'r'): 
      try: 
       xx, yy, zz = map(float, l.split()) 
       if zz > 0. : 
        x.append(int(xx)) 
        y.append(int(yy)) 
        z.append(zz) 
      except ValueError: 
       pass 

     plt.scatter(x, y, c=z ,s=35, marker='s',cmap=mpl.cm.spectral,linewidths=0) 
     plt.clim(0,max(z)) 
     cbar=plt.colorbar() 
     cbar.ax.set_visible(False) 
     s=18 

     plt.xlim([min(x)-3,max(x)+3]) 
     plt.ylim([min(y)-3,max(y)+3]) 
     plt.axis('off') 

     finalname = fname + '.png' 
     pdfname = fname + '.png' 

     plt.savefig(pdfname,dpi=100,bbox_inches='tight') 

Я использовал его, чтобы построить е (х, у) = х * у/(х + у). Участок у меня есть:

Обратите внимание, что у меня есть ненужный дополнительный элемент в моем участке, указанном указателем. Я манипулировал своими данными, чтобы создать разрез в верхней правой части сюжета. X, Y, Z значения, которые я использовал, можно найти здесь:

http://pastebin.com/snyvGD2q

Возможно, что я делаю это не самое лучшее решение. Поэтому я был бы признателен за любые альтернативные решения.

Спасибо заранее Alex

ответ

2

Ваша проблема вытекает из ваших исходных данных. Если вы проверяете линии вокруг 1773 в текстовом файле, у вас есть:

29   50 18.4 
    29   51 18.5 
    29   52 18.6 
    29   60 19.6 
    30   1 1.0 
    30   2 1.9 
    30   3 2.7 
    30   4 3.5 

Скачок от у = 52 у = 60 вызывает точка на рисунке

+0

О, да. Как это получилось ... Спасибо, это намного проще, чем я думал. И, наконец, последний вопрос заключается в том, что для каждого квадрата нужен квадратный размер. Я должен быть изменен с изменением размера матрицы, что довольно неудобно, когда его просто жестко кодируют. –

Смежные вопросы