![Python数据可视化之matplotlib精进](https://wfqqreader-1252317822.image.myqcloud.com/cover/900/25449900/b_25449900.jpg)
2.5 延伸阅读
2.5.1 使用折线绘制圆
绘制几何图形中的圆形不仅可以通过类Circle实现,也可以通过折线实现。下面,我们就具体讲解使用折线绘制圆的实现方法。
1.代码实现
![](https://epubservercos.yuewen.com/39936E/13898203705421006/epubprivate/OEBPS/Images/34_1.jpg?sign=1738319507-uuzcx4kXwJsk1kEYvsS6QNkgLeyguy2W-0-cb9727d99d78fc307d921184b22bcf65)
![](https://epubservercos.yuewen.com/39936E/13898203705421006/epubprivate/OEBPS/Images/35_1.jpg?sign=1738319507-WiZFsJnaI3TS1fxvOBJNkKdBAEOSBHb4-0-02a41efe731d6ec7f82d2069abdaea1b)
2.运行结果(见图2-5)
![](https://epubservercos.yuewen.com/39936E/13898203705421006/epubprivate/OEBPS/Images/36_1.jpg?sign=1738319507-wtYySizDlEJmM5TH652OPccU7PmF2zB0-0-56ce16c8d0fcff46a86de6ff6b28f2b4)
图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.代码实现
![](https://epubservercos.yuewen.com/39936E/13898203705421006/epubprivate/OEBPS/Images/37_1.jpg?sign=1738319507-TWCbXuW7C0qZ0PRVp52HA75giz8LkwXG-0-bf91f8b43a01ad1ff4e940350ca2c1f0)
2.运行结果(见图2-6)
![](https://epubservercos.yuewen.com/39936E/13898203705421006/epubprivate/OEBPS/Images/38_1.jpg?sign=1738319507-sMkh78y4lDDVMPlDnjcUDYk0vtq1fM5W-0-e52ed801b8c906e4b6c5d2e578b35922)
图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.代码实现
![](https://epubservercos.yuewen.com/39936E/13898203705421006/epubprivate/OEBPS/Images/38_2.jpg?sign=1738319507-59Vbf5zHGBUgmB4oyIIIjUFyrPvWZlza-0-e511e6307d3a5e7640a17441b902fc76)
![](https://epubservercos.yuewen.com/39936E/13898203705421006/epubprivate/OEBPS/Images/39_1.jpg?sign=1738319507-aYqEo08QM3LZj1s5lHGxWohyOKW1kXE5-0-1f25908900cc7a80c8c093f7d08b7d8e)
2.运行结果(见图2-7)
![](https://epubservercos.yuewen.com/39936E/13898203705421006/epubprivate/OEBPS/Images/40_1.jpg?sign=1738319507-O2ZMVTmVZrKCZwzyQsPFLAb6wCsOzziA-0-5e962350b9220352915564780c7e21ec)
图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.代码实现
![](https://epubservercos.yuewen.com/39936E/13898203705421006/epubprivate/OEBPS/Images/40_2.jpg?sign=1738319507-9LXVfo5DSum4BIJXagssHtlnWsy8LfVX-0-886ae5c6ae8bd2b33879c8b758000615)
![](https://epubservercos.yuewen.com/39936E/13898203705421006/epubprivate/OEBPS/Images/41_1.jpg?sign=1738319507-GgP1U9aPFT0svJElMWGFodNviOBJsRjH-0-b7a3ccfaaa0e2db9d5d19e1ed70cfc92)
![](https://epubservercos.yuewen.com/39936E/13898203705421006/epubprivate/OEBPS/Images/42_1.jpg?sign=1738319507-ADCbEJMiKNImpACO3c1Qb2kroFSsiXRo-0-c76578573a724befc7756160712179b6)
2.运行结果(见图2-8)
![](https://epubservercos.yuewen.com/39936E/13898203705421006/epubprivate/OEBPS/Images/42_2.jpg?sign=1738319507-Eg7U9Lt4SMmj99CfBl0RCUsxf820JYv6-0-f4643426456b04dd9a3fbde323047c74)
图2-8
3.代码精讲
我们可以看到,通过使用楔形完成了绘制圆环式饼图的任务。
(1)使用楔形绘制圆环式饼图的关键在于类Wedge中的参数width。使用参数width设置圆环的宽度,楔形的半径是以外圆的半径作为计算标准的,圆环的宽度就是外圆和内圆的半径差值。
(2)使用类Rectangle和实例方法text()绘制图例内容。