使用matplotlib创建服务器端图表的包;还提供了通过django直接提供这些图表的示例。

webplotlib的Python项目详细描述


作为开发人员,需要在web上显示数据图表 站点/服务提供两个主要的生成选项:服务器端,或 客户端/浏览器端。

  • 服务器端图表生成的主要好处是:完全 跨浏览器的一致显示(甚至IE也可以处理显示 图像),并在浏览器外部重新使用图表图像,例如 正在生成PDF文档。
  • 客户端/浏览器端图表生成的主要好处是: 交互性(如果需要),或者通常更动态的行为, 例如,使用用户的新输入立即更新图表。

如果您需要python服务器端图表,可以使用webplotlib 生成,提供一个方便和模块化的包/api。是GPL 得到许可的。

安装

注意:即使我为django上下文编写了这个包,它也可以 无需Django或在Django外即可轻松使用。更多细节见下文。

webplotlib有以下直接依赖项:

  1. numpy,matplotlib也依赖于它。你可以安装这个 全局(例如sudo pip install numpy)或仅用于相关 维图阿列诺夫。要安装它的全部功能 系统依赖项(如fortran),例如ubuntu上的包 libatlas基本开发,gfortran,gcc,g++。
  2. 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.
  3. 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。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java组织。冬眠hql。内部的阿斯特。QuerySyntaxException:<table\u name>未映射[来自<table\u name>]   异常无法有效使用来自Java的多捕获   java Hibernate Search是Lucene的干净抽象吗?   组织。xml。萨克斯。SAXException:没有针对的反序列化程序{http://www.w3.org/2001/XMLSchema}Java中使用Axis的anyType   java是独立于Eclipse平台的吗?   java PigLatin语句转换器方法给出了“indexoutofboundsexception”错误等   java Spring+Jackson+反序列化泛型对象列表   java获取firefox配置文件的配置文件当配置文件计数超过3(包括默认值)时,我没有选择给定的配置文件   java XPages应用程序无法运行   java为什么字符连接返回“int”和?   java如何以正确的方式从静态助手类中的异步方法返回值?   java如何将字符串值转换为整数数组列表   javajackcess表限制?   java如何使用SMACK API和GTALK发送消息?   java按钮显示在左上角,具有不同的外观和感觉