【发布时间】:2011-12-02 04:09:32
【问题描述】:
我有一个嵌入了多个 Matplotlib 图形的页面。这些数字通过 Ajax 插入/操作如下(带有时间戳以便被浏览器重新加载):
<img src="/charts/somedata.png?time=' + str(time.time()) + '" />
然后将 url 匹配到类似的视图(我应该提到我使用 Django):
(r'^charts/(?P<chart>[A-Za-z_]+).png$', 'views.charts'),
def charts(request, chart):
# Dynamically loading the appropriate module
chart_module = import_module('functions.charts.' + chart)
return chart_module.show_chart(request)
图表模块(somedata.py)如下所示:
from __future__ import division
from django.http import HttpResponseRedirect, HttpResponse
def show_chart(request):
try:
# Initiating figure
from matplotlib.pyplot import figure
from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
fig1 = figure(figsize=(5.33,4), facecolor = 'white')
ax = fig1.add_axes([0.02,0.02,0.98,0.98], aspect='equal')
# Some plotting to ax
canvas=FigureCanvas(fig1)
response=HttpResponse(content_type='image/png')
canvas.print_png(response)
fig1.clear()
return response
except:
return HttpResponseRedirect("/")
使用 matplotlib 0.99 版。?我有时会遇到一个问题,即一个图表的一部分被绘制在同一页面上的另一个图表中。有时,这在重新加载后得到修复。我想出的解决方案是在settings.py中加入以下内容:
# Force matplotlib to NOT use any Xwindows backend.
# This is necessary before importing pyplot or anything else from matplotlib
import matplotlib
matplotlib.use('Agg')
但是,在更新到 matplotlib 1.0.1 版本后,问题又回来了。图形相互干扰,或者图形的某些部分根本没有绘制?关于问题可能出在哪里的任何想法?
编辑:两个图合二为一的示例。顶部的线条属于另一个图形,它们在那里缺失。我还应该提到,这绝不是在本地运行开发服务器的问题!
【问题讨论】:
-
你能给我们展示一个带有两个绘图的示例 png 吗?
-
@jozzas 请看我上面的编辑:这很烦人,但经常在重新加载后得到解决。任何想法可能取决于什么?
-
我会将您的 matplotlib 导入行移动到文件顶部,作为开始。另请查看使用 savefig 而不是 print_png。 savefig 仅适用于图形,而 pring_png 适用于您的画布,看起来它正在被回收且未正确清除。
标签: django matplotlib