查看单个帖子
  #1 (permalink)  
旧 2008-6-20, 04:42 PM
Maggie Shen Maggie Shen 当前离线
Moderator
 
注册日期: 2008-5-30
帖子: 79
积分: 1,074
默认 age pyramid chart制作方法

先来看一下目标chart,从用户那里拿到的是这样一张样图,见附件age pyramid-origin.jpg,这是一种较为常见的chart,所以birt应该也能实现它。乍看之下是金字塔形的,其实是用 stacked bar chart做的。

做chart,数据很重要。我从网上搜了一大圈,可是没有找到可用的数据,只能自己造了。观察了一下样图,于是我做了一个flat file,其中包含了三列(Age, Male, Female),分别表示年龄段,男性数量,女性数量。不过我想真实的数据应该不是这样的,有待讨论。

另外,我发现这个chart的横轴是对称的,这种情况以前没有遇到过。我试了一下设置了轴的origin,但是只有轴的位置移动了,但是bar的起始点并没有跟着移动,这并不是我想要得效果。于是我想了一个方法,就是对数据做一个处理,使得一边的数据变成负值,这样就达到了bar的起始点移动的目的。但还有一个问题就是横轴的label将显示为负值,这个可以用script来修改。

主要的问题解决了,下面我把制作的详细步骤写一下,有兴趣的同学可以跟着做一下:

1.New a dataset with the flat file.
2. Insert a chart in layout. On Select Chart Type tab, select chart type as bar chart, select Subtype as stacked bar. Tick the Flip Axis option.
3. Switch to Select Data tab, Use Data from the dataset, select "Age" column as Category Series, select "Male" column as Series1. New a Series2, select "Female" column as series2. Modify the expression of Series1 as "row["Male"]*(-1)".
(到这里呢,age pyramid 已经初具模型了,加油!)
4. Switch to Format Chart tab, select Series node, edit Title of Series1 as "male", Title of Series2 as "female".Select Chart Area -> Title node and edit Chart Title as "age pyramid".
5. Select Chart Area->Axis->Y-Axis node, click the scale button. In Axis Scale dialog, input Min as "-70000", Max as "70000", tick Steps Size and input "20000". Click Finish in chart builder.
6. Select the chart in layout and select Script tab, select function beforeDrawAxisLabel and input the following script:

if(!axis.isCategoryAxis()&&label.getCaption().getValue()<0)
label.getCaption().setValue(label.getCaption().getValue()*(-1));


好了,大功告成了。Preview 看看吧。效果图见age pyramid.jpg.

最后,关于前面讨论的数据的问题。真实的数据可能并不是这么理想的。猜想真实的人口数据可能只包括了(出生年月,性别),这就要求我们在原始数据上加以处理来得到我们想要的数据,这个可以通过sql语句或者chart本身的数据处理功能。个人觉得chart本身处理数据的能力还是比较弱的,还有很多有待改进的地方,所以也欢迎大家多提宝贵的意见。
上传的图像
文件类型: jpg age pyramid.jpg (48.2 KB, 105 次查看)
文件类型: jpg age pyramid-origin.JPG (34.1 KB, 65 次查看)
上传的附件
文件类型: txt agedata.txt (380 字节, 59 次查看)

此帖于 2008-6-20 04:55 PM 被 Maggie Shen 编辑.
回复时引用此帖