小编sav*_*tas的帖子

如何在reportlab画布中绘制一个matplotlib图像?

我想使用drawImage方法将使用matplotlib生成的图形添加到reportlab画布中,而不必先将图形保存到硬盘驱动器中.

我的问题与以下内容有关: ReportLab是否有可流动的matplotlib?,很好地解决了.但是,我不想使用DocTemplates,Stories,Flowables等.如上所述,我想使用drawImage将它放在画布中的某个位置.

我尝试使用以下方法将matplotlib图转换为PIL图像:

1)http://www.icare.univ-lille1.fr/wiki/index.php/How_to_convert_a_matplotlib_figure_to_a_numpy_array_or_a_PIL_image

2)http://matplotlib.org/faq/howto_faq.html#matplotlib-in-a-web-application-server

例如,一些无法工作的代码是:

import Image
import matplotlib.pyplot as plt
import cStringIO
from reportlab.pdfgen import canvas
from reportlab.lib.units import inch, cm

fig = plt.figure(figsize=(4, 3))
plt.plot([1,2,3,4])
plt.ylabel('some numbers')

imgdata = cStringIO.StringIO()
fig.savefig(imgdata, format='png')
imgdata.seek(0)  # rewind the data
im = Image.open(imgdata)

c = canvas.Canvas('test.pdf')
#c.drawImage(imgdata, cm, cm, inch, inch)
c.drawImage(im, cm, cm, inch, inch)
c.save()
Run Code Online (Sandbox Code Playgroud)

试图imgdata在错误中绘制结果:

AttributeError: 'cStringIO.StringO' object has no attribute 'rfind'
Run Code Online (Sandbox Code Playgroud)

虽然绘图im给出:

AttributeError: rfind
Run Code Online (Sandbox Code Playgroud)

现在有人如何解决这个问题?任何帮助将不胜感激.

python reportlab matplotlib

13
推荐指数
2
解决办法
9619
查看次数

仅清除matplotlib图的一部分

我正在使用嵌入在WxPython GUI中的matplotlib图来呈现一些数据.图中的内容(显示的数据)随点击按钮的功能不断变化,...

数据有两种类型.

1)轮廓线

self.axes.contour(x_scale_map,y_scale_map,matrix,cl,cmap=my_cmap,extent=0,matrix.shape[1]-1,0,matrix.shape[0]-1))
Run Code Online (Sandbox Code Playgroud)

加载速度相对较慢(~1s),但不会经常变化.

2)在这个轮廓的顶部,我绘制了一些例如线条

self.axes.axhline(y,color='black')
Run Code Online (Sandbox Code Playgroud)

这些线条显然是立即绘制的,并且经常根据用户点击的内容进行更改.在这些情况下,先前绘制的线条需要消失,新的线条需要出现,而等高线图保持不变.

现在,我的问题如下.我还没有找到一种方法只删除线条而不是轮廓.获得所需结果的唯一方法似乎是:

self.axes.clear()
Run Code Online (Sandbox Code Playgroud)

然后重新绘制轮廓和新线.但如上所述,每次重新加载轮廓都很慢,因而很烦人.

有没有办法只清除图中的线条?我试图通过做类似的事情来使用叠加的子图:

self.axes1 = self.fig.add_subplot(111)
self.axes2 = self.fig.add_subplot(111)
self.axes1.contour(...)
self.axes2.axhline(y,color='black')
self.axes2.clear()
Run Code Online (Sandbox Code Playgroud)

但是最后一行清除了整个数字.

有谁知道如何实现所需的功能?谢谢

matplotlib

4
推荐指数
1
解决办法
4872
查看次数

标签 统计

matplotlib ×2

python ×1

reportlab ×1