从互联网上的一些例子中我制作了下面的测试代码.有用!
...但是,如果我重新加载页面,饼图将使用相同的图像绘制自己.每次重新加载页面时,某些部分会变暗.当我重新启动开发服务器时,它会被重置.如何在Django中使用Matplotlib正确绘制?它看起来好像记得一些图纸......
源views.py(让urls.py链接到它):
from pylab import figure, axes, pie, title
from matplotlib.backends.backend_agg import FigureCanvasAgg
def test_matplotlib(request):
f = figure(1, figsize=(6,6))
ax = axes([0.1, 0.1, 0.8, 0.8])
labels = 'Frogs', 'Hogs', 'Dogs', 'Logs'
fracs = [15,30,45, 10]
explode=(0, 0.05, 0, 0)
pie(fracs, explode=explode, labels=labels, autopct='%1.1f%%', shadow=True)
title('Raining Hogs and Dogs', bbox={'facecolor':'0.8', 'pad':5})
canvas = FigureCanvasAgg(f)
response = HttpResponse(content_type='image/png')
canvas.print_png(response)
return response
Run Code Online (Sandbox Code Playgroud)
我正在使用Django 1.0.1和Python 2.6.2(Linux).
所以,请耐心等待,因为我对Django,Python和Web开发非常陌生.我想要做的是显示我使用matplotlib制作的图表.我让它工作到主页自动重定向到图形的png(基本上是浏览器中显示图形的选项卡).但是,现在我想要的是看到实际的主页与图形简单嵌入.换句话说,我想看到导航栏等,然后是网站正文中的图形.
到目前为止,我已经搜索过,而且我对如何实现这一目标有所了解.我在想的是有一个只返回图形的特殊视图.然后,以某种方式从我的模板中的img src标签访问此png图像,我将用它来显示我的数据.
图形代码:
from django.shortcuts import render
import urllib
import json
from django.http import HttpResponse
from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
from matplotlib.figure import Figure
import datetime as dt
import pdb
def index(request):
stock_price_url = 'https://www.quandl.com/api/v3/datatables/WIKI/PRICES.json?ticker=GOOGL&date.gte=20151101&qopts.columns=date,close&api_key=KEY'
date = []
price = []
#pdb.set_trace()
source_code = urllib.request.urlopen(stock_price_url).read().decode()
json_root = json.loads(source_code)
json_datatable = json_root["datatable"]
json_data = json_datatable["data"]
for day in json_data:
date.append(dt.datetime.strptime(day[0], '%Y-%m-%d'))
price.append(day[1])
fig=Figure()
ax = fig.add_subplot(1,1,1)
ax.plot(date, price, '-')
ax.set_xlabel('Date')
ax.set_ylabel('Price')
ax.set_title("Google Stock")
canvas = FigureCanvas(fig)
response = HttpResponse(content_type='image/png') …Run Code Online (Sandbox Code Playgroud) 我正在阅读Python开发人员的Matplotlib一书,但我正在努力遵循第8章"Django应用程序中的Matplotlib"一节中的示例.
到目前为止,我已发出命令
django-admin startproject mpldjango
Run Code Online (Sandbox Code Playgroud)
并且,在mpldjango目录中,
python manage.py startapp mpl
Run Code Online (Sandbox Code Playgroud)
根据这个例子,mpldjango/mpl我做了views.py如下:
import django
from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
from matplotlib.figure import Figure
import numpy as np
def mplimage(request):
fig = Figure()
canvas = FigureCanvas(fig)
ax = fig.add_subplot(111)
x = np.arange(-2,1.5,.01)
y = np.sin(np.exp(2*x))
ax.plot(x, y)
response=django.http.HttpResponse(content_type='image/png')
canvas.print_png(response)
return response
Run Code Online (Sandbox Code Playgroud)
接下来,书中说mpldjango/urls.py应该添加这一行:
urlpatterns = patterns('',
(r'mplimage.png', 'mpl.views.mplimage'),
)
Run Code Online (Sandbox Code Playgroud)
但是,我不知道这是如何工作的,因为在'default'中urls.py,urlpatterns是一个django.conf.urls.url对象:
from django.conf.urls import url …Run Code Online (Sandbox Code Playgroud)