使用matplotlib的简单Django图示例

2024-05-14 00:49:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我在寻找一个非常简单的例子,它使用Django查询集,然后使用matplotlib生成一个图形。我发现的所有例子都有硬编码的数据值,或者它们不能真正解释它们在做什么。我想这对其他人来说也是个好问题。在

让我用一个非常简单的例子来说明,这样对我和其他n00b来说都很容易理解。;—)

class Animals(models.Model):
    cats = models.PositiveSmallIntegerField
    dogs = models.PositiveSmallIntegerField
    created = created = models.DateTimeField(auto_now_add=True)

datatograph = Animals.objects.all()

如何将datatograph转换成正确的格式,以便将其传递给matplotlib,最后得到两个整数X轴、日期y轴、dogs和cats行。在

谢谢你!在


Tags: 数据django图形编码matplotlibmodelsclass例子
2条回答

首先,让我们创建一些动物对象(我从模型中删除了auto_now_add,以使其更简单):

from random import randint
from datetime import timedelta
from django.utils import timezone

from animals.models import Animals

animals = []
base_date = timezone.now().replace(day=1)
for i in range(0, 10):
    dt = base_date + timedelta(days=i)
    animals.append(Animals(
        cats=randint(0, 100),
        dogs=randint(0, 100),
        created=dt))

Animals.objects.bulk_create(animals)

然后我们可以这样做:

^{pr2}$

这将创建一个类似this的图表。在

我很难理解你的答案,因为使用了lambda,我发现有点难以理解。我让我的朋友解释一下,我大脑的秘诀是知道我们正在做的是将ORM中的三列转换成一个数组(Python中的LIST)。我认为这对初学者(像我一样)来说是一个更简单的答案。在

class Animals(models.Model):
cats = models.PositiveSmallIntegerField
dogs = models.PositiveSmallIntegerField
created = created = models.DateTimeField(auto_now_add=True)

import matplotlib.pyplot as plt

datatograph = Animals.objects.all()

for a in datatograph
    catslist = catslist + [a.cats]
    dogslist = dogslist + [a.cats]
    dates = dates + [a.created]
plt.plot(dates, catslist)
plt.plot(dates, dogslist)
plt.show() # Pops up a dialog with the graph, se plt.savefig(filename.ext) to save in .ext format like .png
plt.close()

相关问题 更多 >