gpt4 book ai didi

python - 将 matplotlib AxesImage 转换为 PIL PhotoImage,如何在 Tkinter 中绘制 matplotlib 结果

转载 作者:太空宇宙 更新时间:2023-11-03 18:50:05 26 4
gpt4 key购买 nike

我正在尝试执行以下操作:

  1. 使用 matplotlib 包通过 imshow() 创建绘图,它给出 matplotlib.image.AxesImage
  2. matplotlib.image.AxesImage转换为PIL.ImageTk.PhotoImage
  3. 使用此 PIL.ImageTk.PhotoImage 作为 TkInter Canvas 上的图像

如何在不保存任何图像的情况下完成上述操作?

在引用一篇文章后,我尝试使用以下代码直接对我的数据进行颜色编码:

from Tkinter import *
from PIL import ImageTk,Image
import numpy as np
from pylab import cm
root=Tk()
canvas = Canvas(root)
canvas.pack(expand = YES, fill = BOTH)
x = np.linspace(0, 2 * np.pi, 120)
y = np.linspace(0, 2 * np.pi, 100).reshape(-1, 1)
myarray = np.sin(x) + np.cos(y)
image1 = Image.fromarray(np.uint8(cm.gist_earth(myarray)*255))
test = canvas.create_image(10,10,image = image1)
#canvas.itemconfig(test, image=nextimage)
mainloop()

上面的代码给出了错误

TclError: image "<PIL.Image.Image image mode=RGBA size=120x100 at 0x2DC01E8>" doesn't exist

可能是什么问题?

最佳答案

您必须创建并清空 ImageTk.PhotoImage 实例,然后将 Image 实例中的内容粘贴到此处。

如果您正在读取 AxesImage 对象(由 imshow 返回),您可以先将其数据传输到 Image,然后粘贴到照片图像

这是一个示例(请注意,您实际上需要通过网格计算 myarray):

from Tkinter import *
from PIL import Image, ImageTk
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm
root=Tk()
canvas = Canvas(root)
canvas.pack(expand = YES, fill = BOTH)
x = np.linspace(0, 2*np.pi, 400)
y = np.linspace(0, 2*np.pi, 400)
X, Y = np.meshgrid(x, y, copy=False)
myarray = np.cos(X) + np.cos(Y)

im_plt = plt.imshow(myarray)

image1 = Image.fromarray(np.uint8( im_plt.get_cmap()(im_plt.get_array())*255))
im = ImageTk.PhotoImage('RGB', image1.size)
im.paste(image1)
test = canvas.create_image(0, 0, image=im)
mainloop()

这将导致类似的结果:

enter image description here

关于python - 将 matplotlib AxesImage 转换为 PIL PhotoImage,如何在 Tkinter 中绘制 matplotlib 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18546889/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com