今天找到一个ChartDirector的非常不错的生成Chart图的库,它生成的结果是图片。它是使用C++开发的,同时支持多种语言的绑定,可以在象Python这样在的动态语言中使用。除了它,我还找到一个叫XML/SWF的Falsh的生成Chart图的东西,从名字可以看出,它是使用XML作为数据交换的格式。它与前者不同,通过SWF可以实现动态的图效果,还可以实时变化。不过考虑到它的体积和下载速度,我还是先考虑如何使用ChartDirector吧。下面是简单的使用方法。
一、安装
ChartDirector支持多种平台,我是在Windows下测试的。下载ChartDirector后,我没有发现有标准的安装程序,文档中的安排说明就是手工来做。于是我在Lib/site-packages下创建了一个chartdir的目录,然后将lib目录下的文件拷贝到这个目录下。再在site-packages目录下创建了名为chartdir.pth的文件,内容就一行:chartdir,它就是chartdir目录名。这样就可以方便地导入pychartdir库了。
二、测试
ChartDirector提供了一个chm格式的文档,写得非常详细,有许多的例子,还有生成的效果图。而且ChartDirector本身也带了许多的例子程序可以直接运行测试的。例子分为两种,一种是生成图形文件,另一种是在CGI下运行,输出字节流的。因此你可以简单地运行第一类的例子,直接生成图片看结果进行测试。很简单。
三、在Django中进行测试
在第二类的例子中,它为了生成二进制数据,代码如:
print "Content-type: image/png\n"
binaryPrint(c.makeChart2(PNG))
第一行是输出结果的Content-type,第二行是输出二进制的结果。在文档上说明,print会对回车进行转换,并且输出多余的回车。不过这是在传统的CGI方式下才有的,在Django下,提供了HttpResponse可以很好的处理MIME类型和二进制数据,如:
return HttpResponse(c.makeChart2(PNG), ‘image/png’)
同时要注意,这里的makeChart2后面有个2,而且参数是输出图片的格式,与直接生成文件的方法不一样。那么View方法只要最后象上面就行了。其它的代码可以直接从例子中拷贝就行了。
四、中文处理
中文是非常重要的一点。而ChartDirector很好的支持了unicode,你可以使用utf-8编码的程序,在程序前加上:#coding=utf-8,并且保存程序为utf-8编码。有些方法提供对字体的设置,如addTitle(‘中文’, ’simsun.ttc’, 15),第二个参数就是字体文件(simsun.ttc就是宋体字体的文件名),它不使用字体名称。那么如果你想整个字体都为中文字体的话,可以使用:setDefaultFonts(’simsun.ttc’),这样整个图都使用宋体了。
五、版权
这个库本身是有版权的,但你可以在不交钱的情况下使用,不过对于无版权的使用,它会自动在图形底部生成一个黄色的信息条。如果你感得它有用,可以考虑注册,如果象我一样还不想花钱,那么有就有吧。



真能找啊。
xlp223 —— 2007年03月07日 @8:13 am
刚刚下的,1.2.1有一个exe,但这个1.2.2就不会了,多谢
请问MySQL_python-1.2.2-py2.5-win32怎么装? —— 2007年03月08日 @11:28 pm
没有exe的,就要自已去编译了,我没编译过。
limodou —— 2007年03月09日 @7:35 pm
limodu你好, 我用ChartDirector画图, 在我的系统上按照你的方法
setDefaultFonts(’simsun.ttc’)
依然无法显示中文。
是不是因为我的系统english xp的缘故呢?
有无什么解决方法啊?
koria —— 2007年03月16日 @2:30 pm
simsun.ttc是安装到windows系统中的一款宋体字体,不知道你有没有。你可以试着改一下其它的英文字体试一试。在ChartDirector的文档中有说明。
limodou —— 2007年03月16日 @4:00 pm
请问一下
我是在freebsd下面使用的,那么应该把simsun.ttc放到哪个目录呢?我尝试了多次无法正确显示中文
adun —— 2007年06月15日 @5:12 pm
应该可以访问到就行了,使用绝对路径?我只在windows下试过,建议你看一下文档看是否有说明。
limodou —— 2007年06月15日 @5:26 pm
恩,查了下文档,果然是路径放错了,现在已经解决了。
匿名 —— 2007年06月15日 @5:43 pm
limodou,
可否指导一下在web2py中如何使用ChartDirector直接生成图形在浏览器上。生成静态方法然后用img标签链接过去我们已经成功。但是类似上文中Django里直接output到浏览器却一直不知怎么做。
titi —— 2010年01月01日 @6:50 pm
我与Massimo联系了一下,他给出了办法。贴在这里给大家参考吧。
you just do
return c.makeChart2(PNG)
The content type is set automatically if you call the action with the extension
with http://…./app/controller/function.png
Or you can set it manually
response.headers['Content-Type']=’image/png’
titi —— 2010年01月09日 @9:15 am