使用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第三方库


热门话题
bufferedreader JavasocketreadLine()方法奇怪的行为   JavaSpring表单:选择多个默认情况下不选择第一个选项   在Java中调用方法之前检查参数的数量   mysql如何在java上执行算术。sql。时间物体?   安卓版libgdx中的java实现库   web应用中的Java内存管理   java异步任务停止工作安卓   Java Android:确保测验答案彼此不同   java内核32。例子在JNA中找不到ReadProcessMemory   Java生产者/消费者并发性问题尝试读取对象时,NoSuchElementFound异常   java阻止返回或关闭应用程序   java如何测量丢弃的UDP消息的数量?   java是处理时间度量的最佳方法?   启动Eclipse应用程序时java Unset环境变量?   java将自定义验证器添加到Eclipse插件中的特定文件类型   找到java否定响应00000436   java如何从typeElement获取实际类型?   java使用vert处理异步操作。十、   java有人能建议简化代码吗?