使用matplotlib创建服务器端图表的包;还提供了通过django直接提供这些图表的示例。
webplotlib的Python项目详细描述
作为开发人员,需要在web上显示数据图表 站点/服务提供两个主要的生成选项:服务器端,或 客户端/浏览器端。
- 服务器端图表生成的主要好处是:完全 跨浏览器的一致显示(甚至IE也可以处理显示 图像),并在浏览器外部重新使用图表图像,例如 正在生成PDF文档。
- 客户端/浏览器端图表生成的主要好处是: 交互性(如果需要),或者通常更动态的行为, 例如,使用用户的新输入立即更新图表。
如果您需要python服务器端图表,可以使用webplotlib 生成,提供一个方便和模块化的包/api。是GPL 得到许可的。
安装
注意:即使我为django上下文编写了这个包,它也可以 无需Django或在Django外即可轻松使用。更多细节见下文。
webplotlib有以下直接依赖项:
- numpy,matplotlib也依赖于它。你可以安装这个 全局(例如sudo pip install numpy)或仅用于相关 维图阿列诺夫。要安装它的全部功能 系统依赖项(如fortran),例如ubuntu上的包 libatlas基本开发,gfortran,gcc,g++。
- matplotlib-您可以通过操作系统打包系统(可能 太旧了),来自pypi,或者源代码。最新版本1.0.1是 表面上看是在pypi上,但pip现在拉错了版本 (截至2011年5月;不是pip的错,请参阅SO discussion) 除非您执行以下操作: pip安装-fhttp://downloads.sourceforge.net/project/matplotlib/matplotlib/matplotlib-1.0.1/matplotlib-1.0.1.tar.gzmatplotlib 您还可以将此程序全局或本地安装到一个virtualenv。 注意,matplotlib有许多系统依赖项,具体取决于 用法:例如,对于ubuntu上的服务器用法,安装软件包:python, python dev、libpng12 dev、libfreetype6-dev.
- py.test,如果你想运行单元测试的话。
安装了依赖项(并在相关的virtualenv中) 使用以下命令从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集成:我发现了 在web上集成matplotlib和django,所以做了一些试验 靠我自己。可以在webplotlib的views.py文件中看到一些示例 它展示了如何服务/返回服务器端生成的png图表 直接作为字符串-当您 要设置图表样式。
所以要在django中使用webplotlib,请更新django项目的 settings.py安装的_应用程序包括“webplotlib”和更新 您的项目的url.py文件(models.py中还没有任何内容) 例如,
urlpatterns = patterns('', ... (r'^wpl/', include('webplotlib.urls')), ... )
另外,考虑在我的应用程序django-metaimage中使用webplotlib,它 轻松创建新图像并将其保存到有用的django ORM模型实例/表示。
测试
基本单元测试可以使用Tox或py.test运行。
历史+设计
webplotlib依赖于Matplotlib-最强大和最流行的 可用于实际图表生成的python图表包。 但我发现(截至2011年春季)缺乏很好的抽象性 matplotlib在web环境中的使用示例,以及 使用其非交互式、面向对象、程序员的示例 接口(相比之下,有大量的examples用于交互 用户驱动的图表创建,仿真Matlab)。因此需要写 一个可以快速生成服务器端图表的新应用程序。
我想要一种生成matplotlib图表(时间序列和条形图)的方法 图表首字母ly)通过一个函数调用 将原始图表数据/图像作为字符串返回-从那里很容易 保存或进一步处理(如添加水印),或通过 在研究了大量的在线例子和文档之后, 尝试和重构,输入webplotlib。最初是 支持时间序列和条形图,获取序列并返回 非丑陋的图表作为png图像字符串,您可以随时使用。会的 更多的抽象(例如单独定义图表模板)和 改进即将到来,但这个版本现在是可用的。
替代方案:为什么不使用flash库?不是OSS,同样的限制 作为javascript库。为什么不使用javascript库呢?之后 查看一堆客户端库(Grafico、HighCharts, 弗洛特,谷歌图表工具,动态图表,拉斐尔),我以为Protovis 它是统治他们的唯一工具。但在了解了他们 文档和示例,我发现显示不一致:简单的图表 在Firefox3/4中看起来不错,但在Chrome中显示时没有勾号 标记和标签,这是不可接受的。我甚至都不介意 看看ie渲染,那里可能有更多的痛苦。而且,我的 需求改变了;我需要在报告中使用图表,所以 必须将图表作为图像,在几个方面保持一致 媒介。所以服务器端生成是一种方法, 巨蟒,很快就会发现没有什么竞争对手 MatplotLib。