![](/img/trans.png)
[英]How do I use Matplotlib pyplot pcolor to provide distinct color to each grid in my plot
[英]how to change pcolor one grid color on click in matplotlib?
我是 python 和 matplotlib 的新手,我想在點擊時更改網格顏色,但是下面的代碼不能,怎么辦? 在此處輸入圖像描述
#!/usr/bin/python
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.colors import LogNorm
import math
Z = np.random.rand(25, 25)
Z = []
for x in range(25) :
sublist = [1]*25
Z.append(sublist)
fig, ax = plt.subplots()
Z[0][0] = 0
mesh = ax.pcolor(Z,edgecolor= 'k')
def onclick(event):
print('%s click: button=%d, x=%d, y=%d, xdata=%f, ydata=%f' %
('double' if event.dblclick else 'single', event.button,
event.x, event.y, event.xdata, event.ydata))
_gx = int(math.floor(event.xdata))
_gy = int(math.floor(event.ydata))
print("index x=%d y=%d", _gx,_gy)
Z[_gy][_gx] = 25
ax.pcolor(Z)
cid = fig.canvas.mpl_connect('button_press_event', onclick)
plt.title('matplotlib.pyplot.pcolormesh() function Example', fontweight ="bold")
plt.show()
有幾個問題:
Z[_gy, _gx] = 25
ax.pcolor
將不斷創建新的顏色網格,一個在另一個之上,直到系統變得非常慢; 通常更新已創建元素的屬性; mesh.set_array
是一種更新 colors 值的方法ax.pcolor
時,設置vmin
和vmax
會告訴 matplotlib 哪個值對應於最低顏色,哪個對應於最高顏色; 它也可能有助於顯式 設置顏色圖(默認為“viridis”)fig.canvas.draw()
來顯示修改后的網格(這取決於運行 matplotlib 的環境)import matplotlib.pyplot as plt
import numpy as np
import math
def onclick(event):
print('%s click: button=%d, x=%d, y=%d, xdata=%f, ydata=%f' %
('double' if event.dblclick else 'single', event.button,
event.x, event.y, event.xdata, event.ydata))
_gx = int(math.floor(event.xdata))
_gy = int(math.floor(event.ydata))
print("index x=%d y=%d", _gx, _gy)
Z[_gy, _gx] = 25
mesh.set_array(Z.ravel())
fig.canvas.draw()
Z = np.random.rand(25, 25)
fig, ax = plt.subplots()
mesh = ax.pcolor(Z, edgecolor='k', cmap='plasma', vmin=0, vmax=25)
fig.canvas.mpl_connect('button_press_event', onclick)
plt.title('matplotlib.pyplot.pcolormesh() function Example', fontweight="bold")
plt.show()
請注意, Z = np.random.rand(25, 25)
創建的值介於 0 和 1 之間。使用vmax=25
這會為背景設置一些隨機的非常暗的 colors。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.