2015-11-06 10 views
0

У меня есть текстовый файл, содержащий значения интенсивности 500x500. Я пытаюсь создать 3D-график этих данных, используя Python-XY. Только конкретная часть этого массива 500x500 должна быть построена (235: 268, 210: 280).Python-xy 3d plot из текстового файла

Вот одна из многих попыток кода Python-XY до сих пор:

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

fig = plt.figure() 
ax = fig.gca(projection='3d') 

data = np.genfromtxt('Fig2.txt') 

X = np.linspace(235,268,num=33) 
Y = np.linspace(210,280,num=70) 
x,y = np.meshgrid (X,Y) 
Z = data[235:268,210:280] 

ax.plot_surface(x,y,Z, rstride=1, cstride=1, cmap=cm.jet) 

fig.colorbar(surf, shrink=0.5, aspect=5) 

plt.show() 

Я попытался несколько различных кодов, чтобы произвести этот сюжет, но есть конкретная ошибка, которая продолжает выскакивать:

ValueError: shape mismatch: two or more arrays have incompatible dimensions on axis 0. 

Я предполагаю, что это означает, что оси X и Y являются несовместимыми, но я не уверен, почему это так. Есть ли где-нибудь, в частности, что я ошибаюсь здесь?

ответ

1

Для того, чтобы построить связку точек по 3 осям, каждая точка должна иметь значения x, y и z. Так что если вы хотите нанести 10 баллов, например, 3 списка, которые вы перейдете на plot_surface (по одному для осей x, y и z), должны иметь 10, 10 и 10 значений. Это дает значения x, y и z для всех 10 точек. Списки x, y и Z не имеют равного количества элементов. Некоторые точки имеют значение y, но не значение x.

Перед тем, как позвонить plot_surface, попробуйте вставить эту строку кода:

print len(x), len(y), len(Z) 

Те 3 значения должны быть равны.

+0

Спасибо. Это привело меня к обнаружению проблемы. Я считаю, что может возникнуть проблема с написанием текстового файла. Печать данных [0,1: 10] или любое изменение этого параметра дает массив [nan, nan ... nan]. Формат текстового файла записывается как '[4.001e + 01, 4.002e + 01 ... 4.500e + 01]', '[4.501e + 01, 4.502e + 01 ... 5.000e + 01] ', ' ... 500 строк' '[10.001e + 01, 10.002e + 01 ... 10.500e + 01]' Может быть, проблема в том, что нет никаких отступов, кроме запятых разделение каждого элемента или способ включения «e + 01»? – Azaxa