[英]2D grid data visualization in Python
我需要可視化一些數據。 它是基本的 2D 網格,其中每個單元格都有浮點值。 我知道如何在 OpenCV 中為值分配顏色並繪制網格。 但這里的重點是有太多的值,所以幾乎不可能做到這一點。 我正在尋找一些可以使用漸變的方法。 例如,值 -5.0 將表示為藍色,0 - 黑色,+5.0 表示為紅色。 有沒有辦法在 Python 中做到這一點?
這是我正在談論的示例數據
A B C D
A -1.045 2.0 3.5 -4.890
B -5.678 3.2 2.89 5.78
Matplotlib具有用於繪制數組的imshow
方法:
import matplotlib as mpl
from matplotlib import pyplot
import numpy as np
# make values from -5 to 5, for this example
zvals = np.random.rand(100,100)*10-5
# make a color map of fixed colors
cmap = mpl.colors.ListedColormap(['blue','black','red'])
bounds=[-6,-2,2,6]
norm = mpl.colors.BoundaryNorm(bounds, cmap.N)
# tell imshow about color map so that only set colors are used
img = pyplot.imshow(zvals,interpolation='nearest',
cmap = cmap,norm=norm)
# make a color bar
pyplot.colorbar(img,cmap=cmap,
norm=norm,boundaries=bounds,ticks=[-5,0,5])
pyplot.show()
這是它的樣子:
顏色條設置的詳細信息取自 matplotlib 示例: colorbar_only.py。 它解釋了boundaries
的數量需要比顏色的數量大一。
編輯
您應該注意, imshow
接受origin
關鍵字,它設置了第一個點的分配位置。 默認值為“左上角”,這就是為什么在我發布的圖中,y 軸的左上角為 0,左下角為 99(未顯示)。 另一種方法是設置origin="lower"
,以便在左下角繪制第一個點。
編輯 2
如果您想要漸變而不是離散顏色圖,請通過一系列顏色進行線性插值來制作顏色圖:
fig = pyplot.figure(2)
cmap2 = mpl.colors.LinearSegmentedColormap.from_list('my_colormap',
['blue','black','red'],
256)
img2 = pyplot.imshow(zvals,interpolation='nearest',
cmap = cmap2,
origin='lower')
pyplot.colorbar(img2,cmap=cmap2)
fig.savefig("image2.png")
這產生:
編輯 3
要添加網格,如本示例所示,請使用grid
方法。 將網格顏色設置為“白色”可以很好地與顏色圖使用的顏色配合使用(即默認黑色顯示效果不佳)。
pyplot.grid(True,color='white')
在savefig
調用生成此圖之前包含此內容(為清晰起見,使用 11x11 網格制作):
grid
有很多選項,在 matplotlib 文檔中有描述。 您可能感興趣的是linewidth
。
使用 matplotlib 怎么樣?
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FixedLocator, FormatStrFormatter
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = Axes3D(fig)
Z = np.array([[-1.045, 2.0, 3.5, -4.890],
[-5.678, 3.2, 2.89, 5.78]])
X = np.zeros_like(Z)
X[1,:] = 1
Y = np.zeros_like(Z)
Y[:,1] = 1
Y[:,2] = 2
Y[:,3] = 3
surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.jet,
linewidth=0, antialiased=False)
ax.set_zlim3d(-10.0, 10.0)
ax.w_zaxis.set_major_locator(LinearLocator(10))
ax.w_zaxis.set_major_formatter(FormatStrFormatter('%.03f'))
m = cm.ScalarMappable(cmap=cm.jet)
m.set_array(Z)
fig.colorbar(m)
plt.show()
由此可見:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.