跳转到主要内容

一个用于使用matplotlib创建服务器端图表/图形的软件包;还提供了通过Django直接提供这些图表的示例。

项目描述

作为一名开发者,在您的网站/服务上显示数据图表和图形的需求,提供了两种主要的选择:服务器端或客户端/浏览器端。

  • 服务器端图表生成的优势包括:在所有浏览器上显示的一致性(即使是IE也能处理显示图片),以及在浏览器之外重用图表图片,例如在生成PDF文档时。

  • 客户端/浏览器端图表生成的优势包括:交互性(如果需要),或者更动态的行为,例如用户的新输入立即更新的图表。

如果您需要Python服务器端图表生成,webplotlib可以为您提供一个方便且模块化的软件包/API。它是GPL许可的。

安装

注意:尽管我为Django环境编写了此软件包,但它可以很容易地在Django之外使用。有关更多详细信息,请参阅下文。

webplotlib有以下直接依赖项

  1. Numpy,matplotlib也依赖于它。您可以在全局范围内安装(例如,sudo pip install numpy)或仅对相关虚拟env安装。为了其全部功能,您需要安装系统依赖项(如Fortran),例如在Ubuntu上,需要安装libatlas-base-dev、gfortran、gcc、g++等软件包。

  2. Matplotlib - 您可以通过操作系统包管理系统(可能太旧了)、PyPI或从源代码获取。最新版本1.0.1在PyPI上,但pip目前拉取了错误的版本(截至2011年5月;这不是pip的错误,请参阅这个Stack Overflow讨论),除非您执行以下操作:pip install -f http://downloads.sourceforge.net/project/matplotlib/matplotlib/matplotlib-1.0.1/matplotlib-1.0.1.tar.gz matplotlib。您也可以将其全局或本地安装到虚拟环境中。请注意,Matplotlib有多个系统依赖项,具体取决于使用情况:例如,在Ubuntu服务器上使用时,请安装以下软件包:python、python-dev、libpng12-dev、libfreetype6-dev。

  3. py.test,如果您想运行单元测试。

在安装了依赖项(并在相关虚拟环境中)后,使用以下命令从PyPI安装webplotlib:

pip install webplotlib

或者您也可以通过GitHub从源代码安装。

用法

虽然我编写webplotlib是为了与Django项目一起使用,但目前没有直接依赖Django,因此您可以将webplotlib视为任何其他Python包并直接调用它。例如

from webplotlib.chart_builders import create_chart_as_png_str


# When you have at least one sequence (list, tuple, iterable)
# of data, you can plot it:
chart_png_str = create_chart_as_png_str(
    'timeseries',
    {'data': [[your_data_sequence]], 'names': 'MyDataLine'},
    labels_dct={'title': 'TheBigBoard', 'x': 'Data', 'y': 'Value'})
# Save chart_png_str, etc.

更多使用示例可以在test_chart_builders.py模块中找到。

Django集成:我在网上找到了一些令人困惑和不一致的Matplotlib与Django集成的示例,因此我在自己的项目上做了一些实验。您可以在webplotlib的views.py文件中看到一些示例,它展示了如何直接以字符串形式服务/返回服务器端生成的PNG图表,这在您想快速修改图表样式时非常有用。

因此,要在Django中使用webplotlib,请更新您的Django项目settings.py中的INSTALLED_APPS以包含‘webplotlib’,并更新您的项目urls.py文件(目前models.py中没有内容)如下所示:

urlpatterns = patterns('',
    ...
    (r'^wpl/', include('webplotlib.urls')),
    ...
    )

此外,考虑使用我的应用程序django-metaimage与webplotlib一起使用,该应用程序可以轻松处理创建新图像并将其保存到有用的Django ORM模型实例/表示中。

测试

可以使用Tox或py.test运行基本单元测试。

历史 + 设计

webplotlib依赖于Matplotlib - 可用最强大和最受欢迎的Python图表包 - 用于实际的图表生成。但我在2011年春季发现,缺乏在Web环境中使用Matplotlib的良好抽象示例,以及使用其非交互式、面向对象、面向程序员的接口的示例(相比之下,有大量的示例用于交互式用户驱动的图表创建,模拟MATLAB)。因此,需要编写一个新应用程序,可以快速用于生成服务器端图表。

我需要一个方法,通过单个函数调用生成Matplotlib图表(最初是时间序列和条形图),然后返回原始图表数据/图像作为字符串 - 从那里可以轻松保存它、进一步处理它(例如添加水印)或通过HTTP返回它等。在研究了大量在线示例和文档、进行实验和重构后,出现了webplotlib。最初它支持时间序列和条形图,接受序列并返回美观的PNG图像字符串,您可以立即使用。还将有更多的抽象(例如分别定义图表模板)和改进,但这个版本现在可以使用。

替代方案:为什么不使用Flash库?它不是开源的,具有与JavaScript库相同的限制。为什么不使用JavaScript库?在查看了一堆客户端库(Grafico、Highcharts、flot、Google图表工具、dygraphs、Raphaël)之后,我认为Protovis是它——统治它们的工具。但是在理解他们的文档和示例之后,我发现显示不一致:简单的图表在Firefox 3/4中看起来很好,但在Chrome中没有刻度和标签,这是不可接受的。而且我甚至懒得看IE的渲染效果,那里可能更多痛苦。此外,我的需求也变了;我需要在报告中使用图表,因此图表作为图像在不同媒介上保持一致是必不可少的。所以服务器端生成是唯一的选择,而用Python,你会发现Matplotlib没有真正的竞争对手。

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

webplotlib-0.1.tar.gz (9.0 kB 查看哈希值)

上传时间

构建分布

webplotlib-0.1-py2.6.egg (15.6 kB 查看哈希值)

上传时间

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面