簡體   English   中英

如何在 matplotlib 中單擊時更改 pcolor 一種網格顏色?

[英]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()

有幾個問題:

  • numpy arrays 和列表列表是完全不同的概念,盡管它們都代表二維值數組。 要尋址 numpy 數組中的單元格,您需要逗號符號: Z[_gy, _gx] = 25
  • 對於交互式,它有助於不不斷地重新創建相同的圖形元素; 在 onclick function 中調用ax.pcolor將不斷創建新的顏色網格,一個在另一個之上,直到系統變得非常慢; 通常更新已創建元素的屬性; mesh.set_array是一種更新 colors 值的方法
  • 調用ax.pcolor時,設置vminvmax會告訴 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()

具有交互式更新的 pcolor 網格

請注意, Z = np.random.rand(25, 25)創建的值介於 0 和 1 之間。使用vmax=25這會為背景設置一些隨機的非常暗的 colors。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM