[英]Plot filled contour at screen resolution
我正在嘗試使用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軸的范圍更直觀。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.