柱图元

阅读(163) 标签: 柱图元,

柱图元在绘制各类统计图时经常用到,在12.3坐标轴 等文中的例子中已经有了一定的了解,在这里将详细讲解柱图元各类属性的设置及作用。

柱图元及其数据属性

首先,我们通过下面的体操成绩的簇状柱形图初步了解柱形图的基本使用:

 

A

1

=canvas()

2

=demo.query("select * from GYMSCORE")

3

=A1.plot("BackGround")

4

=A1.plot("EnumAxis","name":"x")

5

=A1.plot("NumericAxis","name":"y","location":2)

6

=A1.plot("Column","axis1":"x","data1":A2.(EVENT+","+NAME),"axis2":"y","data2":A2.(SCORE))

7

=A1.draw@p(450,200)

画法中,A2中从数据库获取绘图使用的数据如下:

A3绘制白色背景;A4中设定横轴x为枚举轴,自动分析数据;A5中设置纵轴y为数值轴,在这个画法中并未绘制图例。A6中绘制柱图,后面将详细分析柱图元的绘图属性。

A7中绘图结果如下:

在默认情况下,柱形图的颜色将由集算器的默认调色板自动生成。

 

柱图元最少仅需一个坐标点即可确定位置,柱图绘制时,将根据数值轴的位置,由数值轴的起始点位置绘制到数据点。设定数据坐标时,同样需要选定两个逻辑坐标轴,并分别设定逻辑坐标。

由于这个图中除了用分类表示不同的项目,还需用系列表示不同的运动员,因此枚举轴上的逻辑坐标需要包含分类和系列的信息,将分类和系列的值用逗号分隔开,如"Vault,Becky Downie"。与点图元类似,当数据坐标有多个时,会绘制多个柱子。

柱图元的宽度

柱形图中,柱子会有一个基本宽度,绘制时不会超过这个基本宽度。这个基本宽度,是由柱子的总数以及枚举轴的Gap ratio属性决定的。Gap ratio表示不同分类的柱子之间的空白区域宽度,与一个柱子基本宽度的比率,默认情况下这个数值为1.5,表示间隙宽度为柱子基本宽度的1.5:

注意,这是枚举轴的属性,但是会影响到使用它的柱图元的绘制。编辑A4中的绘图参数,调整这个属性,就能调整柱子的基本宽度,比如,调整簇状柱形图的枚举轴属性如下:

设定Gap ratio1,这样间隙宽度会变小,与柱子的基本宽度相等。修改设定后,绘图结果如下:

可以看到,调整之后,每组柱子之间的间隙变小了,相对的,柱子的宽度变大了。实际上,柱子的基本宽度,是枚举轴上的Gap ratio,和柱图元绘制柱子的总数及分类数共同决定的。

除了基本宽度外,柱图的宽度还会受到柱图元本身属性的影响。柱图元外观属性中,Columnwidth属性的影响。柱子宽度的属性值表示柱宽占基本宽度的比例,等于1时即为基本宽度。默认情况下,Column width属性为0.9,即柱宽与基本宽度的比例为0.9,从前面的绘图结果中可以看到,此时同一簇的各个柱子并不会紧密相连。如果修改绘图属性如下:

由于Column width值设定变小,因此绘制的柱子宽度也会变窄,绘图结果如下:

柱图元的外观属性

12.5点图元 中了解的外观属性类似,柱图元也同样可以设定柱子的边框和填充颜色。如继续修改A6中柱图元的绘图属性如下:

在这里,将Column width属性恢复为默认值,柱图元的边框修改为蓝色虚线,线粗设为1,填充色使用序列设定,特别的,其中第三个颜色属性虽然设定了渐进色Gradient color,但是Color1Color2属性设定相同。此时,绘图结果如下:

可以看到,柱子的边框及填充颜色按照设定发生了变化。用序列设定的填充色会在绘制时循环使用,其中,当渐进色的Color1Color2设定相同时,会自动处理为明暗效果。

 

除了边框和填充色之外,柱图的外观属性中,除了上一小节介绍的柱子宽度以外,还有Column shape。柱子形状,除了常见的方柱之外,还有立体方柱和圆柱,通常这两种柱子都是在3D效果的坐标系中使用的。

在图元选用的坐标轴中,只要有一个坐标轴选用了3D属性,绘制时就会使用3D效果绘图,如修改A4中枚举轴的绘图属性如下:

仅修改横轴x3D,绘图时整个坐标系就会使用3D效果。此时,如果柱图形状仍然使用Column,就会仍然画出平面的柱图,图形与坐标系效果不协调。如果我们修改A6中柱图的柱子形状为立体方柱,同时恢复默认的边框及填充属性,如下:

则柱图在绘制时会使用立体方柱效果,绘图结果如下:

图中的横轴和纵轴在绘制时都使用了3D效果,绘制时,如果要改变3D效果的深度,可以调整3D属性下面的3D thick ratio,需要注意的是,定义厚度比率时,是以上一小节讲到的基本柱宽为基准的。

可以看一下现在的绘制效果,体会3D深度的改变:

 

我们还可以将柱子形状设为圆柱:

此时绘图结果如下:

特别的,在绘制3D图形时,如果将某个轴线的线型设为不绘制,将会把该轴线绘制成平台效果,如修改上面画法,将A4中横轴的颜色和线型修改如下:

则绘图效果如下:

堆积图

当使用多系列的数据绘制柱图时,有时并不想将它们并列放置,而是需要将同一个分类中的数据堆叠起来,这就是堆积图。我们来看下面的画法:

 

A

1

=canvas()

2

=demo.query("select * from GYMSCORE")

3

=A1.plot("BackGround")

4

=A1.plot("EnumAxis","name":"x")

5

=A1.plot("NumericAxis","name":"y","location":2)

6

=A1.plot("Column","stackType":2,"axis1":"x","data1":A2.(NAME+","+ EVENT),"axis2":"y","data2":A2.(SCORE))

7

=A1.plot("Line","stackType":2,"axis1":"x","data1":A2.(NAME+","+EVENT), "axis2":"y","data2":A2.(SCORE))

8

=A1.draw@p(450,200)

线图元也可以绘制堆积图,属性和柱图元类似,因此在这个画法中,同时绘制了柱图和折线图。和前面的例子不同,在这里设定柱图元和线图元的数据属性时,Data1的数据为A2.(NAME+","+EVENT),以NAME作为枚举轴上的分类数据,EVENT作为系列数据。由于这里需要绘制堆积图,因此A6中的柱图元与A7中的线图元都设定了Stack type属性,将其由默认No stack的改为Stacked by value,如下:

 

此时的绘图结果如下:

可以看到,在绘制每位运动员的图形时,将各个项目的得分堆叠起来。这样,在绘制结果中,可以看到每位运动员的总成绩。

 

另一种堆积图的堆积方式是Stacked by percent,即设定如下:

 

此时绘图结果如下:

在按占比堆积时,每个分类中将绘制各系列数据的占比,而各个分类的数据总和都是100%。这时可以在图中比较数据的占比情况,而每个分类的总值则失去了意义。

柱图元的其它属性

此外,柱图元还有一些特别的属性:Convex edgeData3

Convex edge属性默认为false,如果设为true,则绘制柱图时采用突出边框效果。突出边框的效果通常用于纯色柱图,如下面的画法:

 

A

1

=canvas()

2

=demo.query("select * from GYMSCORE")

3

=A1.plot("BackGround")

4

=A1.plot("EnumAxis","name":"x")

5

=A1.plot("NumericAxis","name":"y","location":2)

6

=A1.plot("Column","fillColor":[["ChartColor",0,false,-39271,-1,0],["ChartColor",0, false,-13210,-1,0],["ChartColor",0,false,-6697984,-1,0]],"axis1":"x","data1": A2.(EVENT+","+NAME),"axis2":"y","data2":A2.(SCORE))

7

=A1.draw@p(450,200)

A6中柱图的填充属性部分如下:

需要注意的是,在这里填充色设定的是非渐进色,与介绍柱图元的外观属性时设定的情况不同。先来看没有设定突出边框时的情况,A7绘图结果如下:

修改A6中柱图元的绘图属性如下:

此时绘图结果如下:

可以看到柱子产生了边缘凸出的效果,Convex edge这个属性同样可以使用在立体方柱图中,但是对于圆柱形的柱图无效。

在本文的第1节中我们讲到,一个柱子只需要定义一个坐标点,就可以自动按照数值轴的定义完成整个柱图的绘制,此时的柱图将从给定坐标点的位置画到数值轴的起始位置。如果不希望柱图按照默认的起点绘制,那么可以设定Data3,改变柱图的起始位置。

如继续修改A6中柱图的属性如下:

在设定Data3时需要注意,这个数据使用的逻辑轴是数据属性中的Axis 2,而设定时需要使用与其它数据属性相同长度的序列。由于上面设定的Data3对每个柱子设定的值都是10,因此柱子将从y轴上10的位置开始绘制,而不是从横轴开始。A7中绘图结果如下:

通过设定Data3,可以绘制一些有特殊要求的统计图,如在股价图中表示股票的开盘价与收盘价。