通过分离服务器和客户端进程,服务器将始终提供绘图服务,以便您始终可以看到它。

matplotlib 的 tk 窗口(plt.show())只在第一次运行,然后只有在外部客户端程序请求时才更新数据并在现有窗口中显示。

问题:

  1. 对于不同的客户端请求,无法在服务器上的同一 tk 窗口内更新绘图。

  2. 如果用户不关闭窗口,则下一个函数调用似乎不会发生。

下面的代码是我的测试代码,我该如何解决这个问题?

run_once = 0

# make a figure + axes
fig, ax = plt.subplots(1, 1, tight_layout=True)


im = None

def show_grid(np_array):
    global run_once, im
    array_shape = np_array.shape
    x = array_shape[0]
    y = array_shape[1]

    if run_once == 0:
        run_once = 1
        print('client A request')

        # make a figure + axes
        # fig, ax = plt.subplots(1, 1, tight_layout=True)

        # make color map
        my_cmap = clr.ListedColormap(['#000000', '#0074D9', '#FF4136', '#2ECC40', '#FFDC00', '#AAAAAA', '#F012BE', '#FF851B', '#7FDBFF', '#870C25'])

        # set the 'bad' values (nan) to be white and transparent
        my_cmap.set_bad(color='w', alpha=0)

        bound = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
        my_norm = clr.BoundaryNorm(bound, my_cmap.N, clip=True)

        # # draw the grid
        for i in range(x + 1):
            ax.axhline(i, lw=2, color='k', zorder=5)

        for j in range(y + 1):
            ax.axvline(j, lw=2, color='k', zorder=5)

        # draw the boxes
        im = ax.imshow(np_array, interpolation='none', cmap=my_cmap, norm=my_norm, extent=[0, y, 0, x], zorder=0)

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

        plt.show()
        # plt.pause(0.0001)
        # plt.clf()
    else:
        print('client B request')
        im.set_array(np_array)
        fig.canvas.draw()
        fig.canvas.flush_events()

#1楼 票数:0 已采纳

修复了我的代码错误,你可以在这里找到工作版本

固定点是:

plt.ion()

if run_once == 0:
    run_once = 1

    print('client A request')
    # make a figure + axes
    # fig, ax = plt.subplots(1, 1, tight_layout=True)
    fig.show()
    fig.canvas.draw()
    fig.canvas.flush_events()
    plt.show()
else:
    print('client B, C, D, ... request')
    # im.set_array(np_array.ravel())
    im.set_array(np_array)
    fig.show()
    fig.canvas.draw()
    fig.canvas.flush_events()
    plt.draw()

  ask by sailfish009 translate from so

未解决问题?本站智能推荐:

1回复

matplotlib相当于没有GUI的Ubuntu服务器?

我有一个无GUI的云服务器运行Bitnami-Django Ubuntu 14.04 LTS,用于检索和绘制用户数据,但它无法生成图形。 要清楚,我只关心生成和保存图形图像,而不是用户可以选择单击按钮来保存图像。 对于这样的服务器,这样的功能将毫无意义。 在我的普通Ubuntu Lin
5回复

Matplotlib:Web服务器上的交互式绘图

我目前在我的django网站上使用Open Flash Chart 2 ,但我发现它不够可定制。 (当你想要通常的条形图,折扣图时,它很棒,但是自制形状呢......)。 虽然它是开源的,但我不想在Flex代码中潜水。 我正在考虑很多关于matplotlib但是文档在Web应用程序开发
1回复

如何在ubuntu服务器上将matplotlib中的绘图输出到烧瓶中的html模板?

我正在尝试在DigitalOcean上设置一个辅助项目,我正在使用https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-xvii-deployment-on-linux中的git框架开始吧 在这个框架内,我在其中
1回复

绘图传感器布尔数据matplotlib

我有两个要显示的传感器的数据。 两个传感器仅取0/1值。 如何更改x轴标签以显示时间序列,y轴应有2个标签0和1代表沿时间序列的传感器值。
1回复

在无头Ubuntu 14.04服务器上使用matplotlib

我有一个无头的Ubuntu 14.04服务器,我使用SSH远程连接。 我想使用matplotlib并在ssh客户端上显示图。 例如,我将连接使用: 然后从Python控制台,我希望这在窗口中生成一个图: 我已经在我的virtualenv中安装了matplotlib,我运行了s
1回复

在无头服务器上,matplotlib图创建非常缓慢

我在家庭服务器上运行Ubuntu 14.04(服务器版),并且安装了Python 2.7.6,并使用TkAgg作为后端的matplotlib 1.3.1。 我正在通过ssh -Y连接到它。 我遇到的问题是绘图对象的创建非常缓慢。 因此,例如: 该代码需要大约一秒钟的时间才能运行
2回复

python和matplotlib服务器端生成.pdf文档

我想写一个生成.pdf文档的服务器端python脚本。 目前,我已经在服务器端安装了Python 2.7,并在服务器端也安装了matplolib。 一个简单的脚本可以创建一个简单的图并生成一个.png图片。 这是我使用的脚本: 我想知道如何执行相同的操作,但是发送pdf
1回复

如何在烧瓶服务器上运行matplotlib图

这个问题已经在这里有了答案: Python:如何在烧瓶中显示matplotlib [重复] 2个答案 我是python的新手。 我只想知道有什么方法可以使用flask在网页上插入matplotlib图,而无需转换为静态JPG或png? 这是我的代码: