2.5 延伸阅读
2.5.1 使用折线绘制圆
绘制几何图形中的圆形不仅可以通过类Circle实现,也可以通过折线实现。下面,我们就具体讲解使用折线绘制圆的实现方法。
1.代码实现
2.运行结果(见图2-5)
图2-5
3.代码精讲
我们通过实例方法plot()也完成了绘制圆的任务,但是,仍然存在圆的展示效果不理想的情况。这个问题仍然需要调用实例方法axis("equal")来解决。
(1)在子区2中,调用“ax[0,1].plot(y1,y2,color="cornflowerblue",lw=2)”语句完成圆的绘制任务。
(2)同时,调用“ax[0,1].set_aspect("equal","box")”语句实现刻度线的变化量相同和坐标轴的长度相同的目标。
注意:
调用实例方法plot()绘制的圆和调用类Circle绘制的圆在展示效果上有所区别。调用实例方法plot()绘制的圆没有覆盖坐标轴的绘图区域;而调用类Circle绘制的圆即使在填充颜色是白色的情况下,也会覆盖坐标轴的绘图区域。
由此可见,调用类Circle绘制的圆是一个“补片”。也就是说,这个“补片”是一个实实在在的具有颜色的填充区域。
(3)在子区3中,调用“ax[1,0].axis("equal")”语句完成调整坐标轴的刻度线的变化量一致的工作。
(4)在子区4中,调用“ax[1,1].axis([-3,3,-3,3])”和“ax[1,1].set_yticks(np.arange(-3,4,1))”语句完成调整坐标轴的显示范围及调整刻度线的位置方面的工作。
2.5.2 使用椭圆绘制圆
一般而言,我们可以使用类Ellipse绘制圆,但是不可以使用类Circle绘制椭圆。因为我们使用类Ellipse绘制圆,只需要保证参数width和height的取值相同而且刻度线的变化量相同即可完成圆的绘制任务。如果参数width和height的取值相同,但是刻度线的变化量不一致,则也可以使用类Circle完成绘制椭圆的任务。我们使用类Circle绘制椭圆,如果参数width和height的取值不相同,就无法完成使用类Circle绘制椭圆的工作。下面,我们就通过具体代码来比较类Ellipse和Circle的区别与联系。
1.代码实现
2.运行结果(见图2-6)
图2-6
3.代码精讲
(1)通过设置函数subplots()中的参数subplot_kw,使坐标轴的刻度线的变化量相同。
(2)设置圆和椭圆的中心位置相同。圆的半径是1,椭圆的宽度和长度都是2。
(3)通过推导列表生成4个逆时针旋转角度的列表ellipse。
(4)使用内置函数append()将实例circle添加到推导列表ellipse中。
(5)将列表ellipse赋值给变量polygon。
(6)通过调用实例方法 add_patch()分别将推导列表 ellipse 中的实例元素添加到坐标轴实例 ax中,同时,设置实例元素的透明度和填充颜色。
(7)这样,我们获得了一个颜色叠加却是完整覆盖的圆形几何图案。因此,我们使用类 Ellipse 绘制圆,只需要保证参数 width 和 height 的取值相同而且刻度线的变化量相同即可完成圆的绘制任务。
2.5.3 使用楔形绘制饼图
我们使用楔形既可以绘制圆形,也可以绘制圆形的一部分。按照这样的思路,我们可以尝试使用楔形绘制饼图。下面,我们通过具体代码来讲解使用楔形绘制饼图的实现方法。
1.代码实现
2.运行结果(见图2-7)
图2-7
3.代码精讲
我们通过楔形实现了调用pie()绘制的饼图效果的目标。
(1)通过推导列表“[i/float(total) for i in sample_data]”获得原始数据sample_data的元素比重的列表percents。
(2)根据推导列表“[360*i for i in percents]”获得元素比重相对应的角度数值列表angles。
(3)通过类Wedge分别实现绘制4个楔形的目标,即绘制4个饼片。
(4)借助实例方法add_patch()将楔形实例添加到坐标轴实例ax中。
(5)调用实例方法text()将格式化的字符串添加到楔形上,使用参数font_style设置字符串的字体样式等属性值。
2.5.4 使用楔形绘制圆环式饼图
我们可以使用楔形绘制圆环,而且我们知道统计图形中的饼图也有圆环式饼图的展示形式。因此,我们接下来尝试使用楔形绘制圆环式饼图。我们通过具体代码来讲解使用楔形绘制圆环式饼图的实现方法。
1.代码实现
2.运行结果(见图2-8)
图2-8
3.代码精讲
我们可以看到,通过使用楔形完成了绘制圆环式饼图的任务。
(1)使用楔形绘制圆环式饼图的关键在于类Wedge中的参数width。使用参数width设置圆环的宽度,楔形的半径是以外圆的半径作为计算标准的,圆环的宽度就是外圆和内圆的半径差值。
(2)使用类Rectangle和实例方法text()绘制图例内容。