matplotlib Python中交互式imshow plot的奇怪行为

yyhrrdl8  于 2022-11-15  发布在  Python
关注(0)|答案(1)|浏览(130)

我试着构建一个黑色的方格,每次你点击一个方格,它就会变成白色。现在,由于某种原因,我的代码做了一些非常奇怪的事情:
1.我输入的坐标与数组坐标不对应。我试图通过将i = y - (N-1)j = x(x,y)设置为鼠标坐标来改变这一点。但只有第一行会被正确转换(绘图的顶行)。其余行将被垂直反转。
1.当所有方块为白色时,图自动重置为黑色方块。
下面是我的代码:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib
import math

N = 3

# Make an empty data set
data = np.zeros((N, N)) 
    
# Make a figure + axes
fig, ax = plt.subplots(1, 1, tight_layout=True)

# Draw the boxes
box = ax.imshow(data, cmap='gray', extent=[0, N, 0, N])

# Draw the grid

for x in range(N + 1):
    ax.axhline(x, lw=2, color='w', zorder=5)
    ax.axvline(x, lw=2, color='w', zorder=5)
    
# Create interactivity
def on_click(event):
    gx = event.xdata
    gy = event.ydata
    
    print('x=',gx)
    print('y=',gy)
    
    i = int(gy) - N + 1
    j = int(gx) 
    
    data[i,j] = 1
    ax.imshow(data, cmap='gray', extent=[0, N, 0, N])
    
    fig.canvas.draw_idle()
    
fig = plt.gcf()   
fig.canvas.mpl_connect('button_press_event', on_click)

# Turn off the axis labels
ax.axis('off')

plt.show()

谢谢你的帮助

i2byvkas

i2byvkas1#

我发现了问题:
1.它是N - 1 - int(gy)

  1. Matplotlib在没有指定数值的情况下会为我进行归一化处理,所以全为0的网格和全为1的网格是一样的(在这两种情况下,每个单元格都等于平均值)。

相关问题