从3D数据到色彩图

时间:2017-07-19 11:54:32

标签: python matplotlib colormap

前言:我见过these,但我无法从答案中弄清楚该怎么做。另外,我是python和matplotlib的新手。

我有一个

形式的数据文件
X        Y       Z
0.05     1       z
0.10     1       z
...     ...     ...
0.95     1       z
0.05     2       z
...     ...     ...
...     ...     ...
0.95    10       z

每个都在[-0.02:0.5]中使用z。这些结果为190(x,y,z)点。

我以这种方式获取数据

data_file = open('tau.txt', 'r')
buffer = data_file.read()
data_file.close()

data = [map(float, row.split('\t')) for row 
        buffer.strip().split("\n")]

如链接所示,我将它们转换为网格

mu = []
alpha = [] 
tau = []

for elements in data:
    mu.append(elements[0])
    alpha.append(elements[1])
    tau.append(elements[2])

x_data = np.asarray(mu)
y_data = np.asarray(alpha)
z_data = np.asarray(tau)

xi = np.linspace(0.05,0.95,19)
yi = np.linspace(1,10,10)
ar = griddata(x_data,y_data,z_data,xi,yi,interp='nn')

然后我做了这个情节:我希望这样,每个(x,y)坐标都有一个以坐标为中心的正方形,颜色条显示z值。

cmap = mpl.colors.LinearSegmentedColormap.from_list('my_colormap',
           ['white','grey','black'],256)

img = plt.imshow(ar,interpolation='nearest',cmap = 
           cmap,origin='lower')

plt.colorbar(img,cmap=cmap)

我得到了这个:this

首先,我希望颜色条与图形本身的高度相同。我无法理解如何避免这种垃圾。

此外,如果您查看文件,您会立即看到范围不正确:x必须在[0.05:0.95]中,y在[1:10]中。 y简单地移位1(白线,所有z = 0应该是y = 1而不是y = 0),而x假设我无法理解的值。

我需要注意的是,除了这些之外,情节是正确的,无论是z值还是趋势。

如何解决我的问题?

1 个答案:

答案 0 :(得分:0)

imshow用于使用与矩阵或图像大小相同的网格绘制图像和矩阵。这就是为什么你的x轴和y轴是这样的。

对于您要执行的操作,请使用pcolormeshpcolor 与numpy.meshgrid结合使用以获得正确的x和y间距。

这些功能还应支持非常规网格间距。

This page提供了有关其工作原理的一些信息。