Python 以屏幕分辨率绘制填充轮廓

Python 以屏幕分辨率绘制填充轮廓,python,matplotlib,plot,contour,contourf,Python,Matplotlib,Plot,Contour,Contourf,我正在尝试使用matplotlib绘制填充轮廓。我正在使用imshow绘制轮廓。如何以屏幕分辨率的大小绘制轮廓 例如,(x,y)是坐标,z是对应于位置的值: import pylab as plt import numpy as np from Tkinter import * root = Tk() root.title("test window") root.minsize(800, 600) #(x,y) are pixel coordinates of canvas created on

我正在尝试使用
matplotlib
绘制填充轮廓。我正在使用
imshow
绘制轮廓。如何以屏幕分辨率的大小绘制轮廓

例如,(x,y)是坐标,z是对应于位置的值:

import pylab as plt
import numpy as np
from Tkinter import *
root = Tk()
root.title("test window")
root.minsize(800, 600)
#(x,y) are pixel coordinates of canvas created on root, z= values
x=(563.603522282, 405.223798299,91.082456699,418.716359588,86.4813516941,244.703807775,480.84654939,418.702483547,241.136696875,319.613136686,257.545407017,117.714659717,174.788434125,425.913041522)
y=(96.3119943139,65.6348405695,353.988303883,354.795931878,170.857459385,156.952879623,161.233412703,241.960699493,214.026654031,65.6348405695,63.4945740292,54.2200856878,7.13422180103,3.56711090052)
z=(-1, 0, 0.5, -0.2, 1, 6, 0, -5, 4, 1.5, 2,7,-3,1)
Z=np.array((x,y,z)) #not sure from here
im = plt.imshow(Z, cmap='jet') 
root.crate_image(im) # the image created by imshow paste on canvas
mainloop()

以上是我的代码的基本思想。但我不知道该怎么做。请帮助
imshow
想要一个
NxM
阵列,这种阵列可以独立生活在太空中

你有三个向量,所以你真正要问的问题是:

如何将具有随机空间分布的数据插值到规则间隔的网格上

答案如下:

正如现在所写,您的数据最容易显示在散点图中:

import matplotlib.pyplot as plt # don't use pylab
import numpy as np

x= np.array([
    563.603522282, 405.223798299, 91.082456699,
    418.716359588, 86.4813516941, 244.703807775,
    480.84654939,  418.702483547, 241.136696875,
    319.613136686, 257.545407017, 117.714659717,
    174.788434125, 425.913041522
])
y = np.array([
    96.3119943139, 65.6348405695, 353.988303883,
    354.795931878, 170.857459385, 156.952879623,
    161.233412703, 241.960699493, 214.026654031,
    65.6348405695, 63.4945740292, 54.2200856878,
    7.13422180103, 3.56711090052
])

z = np.array([-1, 0, 0.5, -0.2, 1, 6, 0, -5, 4, 1.5, 2,7,-3,1])

# define grid on which you'll interpolate.
N = 100
xi = np.linspace(np.floor(x.min()), np.ceil(x.max()), N)
yi = np.linspace(np.floor(y.min()), np.ceil(y.max()), N)

# grid (interpolate) the data.
zi = plt.mlab.griddata(x, y, z, xi, yi, interp='linear')

# contour the gridded data, plotting dots at the nonuniform data points.
fig, ax = plt.subplots()
c = ax.contour(xi, yi, zi, 15, linewidths=0.5, colors='k')
cf = ax.contourf(xi, yi, zi, 15, cmap=plt.cm.coolwarm,  # seriously, don't use jet or rainbow or anything like that
                  vmax=abs(zi).max(), vmin=-abs(zi).max())
fig.colorbar(cf)  # draw colorbar
# plot data points.
ax.scatter(x, y, marker='o', c='b', s=5, zorder=10)

此时,您可以使用
imshow
pcolor
zi
显示为图像:

fig, ax = plt.subplots()
pc = ax.pcolor(xi, yi, zi, cmap=plt.cm.coolwarm)
fig.colorbar(pc)
fig.savefig('pcolor.png')


我使用了
pcolor
,因为设置x轴和y轴的范围更直观。

@Veedrac添加了我的基本代码这只是一个想法,不是一个工作代码OK,谢谢。很明显你不是有意通过Tkinter来做这件事的!恐怕这有点超出了我的舒适区。你需要解释一下你的数据是什么意思,你想用它们讲述什么故事。如前所述,您的数据远不适合
imshow
tourtf
@PaulH感谢您的回复。我的坐标是屏幕上的点,基于我想要显示的填充等高线图的值。换句话说,我的等高线图尺寸应与屏幕分辨率或尺寸相匹配。感谢您的回复。我的坐标是屏幕上的点,基于我想要显示的填充等高线图的值。换句话说,我的等高线图尺寸应该和屏幕分辨率或尺寸相匹配。@RamKrix--你一直这么说,但没有提供任何例子来说明你的意思。所以我又猜了一个。编辑后的响应看起来如何?