![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=1738905376-aY450BTRU5hGtkBBIIsIgYIsMvuHlHbh-0-6837c482ae66bcdbe2a76f84602e7096)
![](https://epubservercos.yuewen.com/39936E/13898203705421006/epubprivate/OEBPS/Images/35_1.jpg?sign=1738905376-0uVacKLfannJwMuU8A0KfNTa7FWNuvcQ-0-f2a04b7d46bd57751fcc32eeeeeb7f73)
2.运行结果(见图2-5)
![](https://epubservercos.yuewen.com/39936E/13898203705421006/epubprivate/OEBPS/Images/36_1.jpg?sign=1738905376-QYj78cAnklS3XUfsUiiMBgDenrEJgen3-0-f9cf1f113e35232796385353f9c7e208)
图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=1738905376-8UMEzQ5gdzpATjU9Hk56u4V09t2Jdg5n-0-f3a89ca8c5378d6b74cbecffc64aa2ab)
2.运行结果(见图2-6)
![](https://epubservercos.yuewen.com/39936E/13898203705421006/epubprivate/OEBPS/Images/38_1.jpg?sign=1738905376-R7q0BswaKQsQhA72IUikW0HJzLaxPeE1-0-5ade1e89c9399fac004b72b83300845c)
图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=1738905376-ZW4GCGMM04s8JyG5efXfXvt8jLgITkZz-0-aac17efdd497e0c77c823165853c55e3)
![](https://epubservercos.yuewen.com/39936E/13898203705421006/epubprivate/OEBPS/Images/39_1.jpg?sign=1738905376-PvZqQED77GYeZtqU7aJzTKS25SDzbfm6-0-65a1e91bad06c3dcc8fcb680c269acff)
2.运行结果(见图2-7)
![](https://epubservercos.yuewen.com/39936E/13898203705421006/epubprivate/OEBPS/Images/40_1.jpg?sign=1738905376-9058NJ3queIkniPU0aUbIRxtGExk1E38-0-6be769d4f2798ae4a408608bdb79b486)
图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=1738905376-aFLTOlOToEDzXOPem6OJT5Ph1HJjadtI-0-389b3cdc729153f21787155b9b44ba08)
![](https://epubservercos.yuewen.com/39936E/13898203705421006/epubprivate/OEBPS/Images/41_1.jpg?sign=1738905376-C6lelrHBGn2arFvgcqPjIjPozTwS4RkF-0-0ccb35420f7f5ca7aebc9e4395f2d6e6)
![](https://epubservercos.yuewen.com/39936E/13898203705421006/epubprivate/OEBPS/Images/42_1.jpg?sign=1738905376-xyRGK5ZqIIfJugIeNqxhHXXf3tbgmGw8-0-2ce25d440bdbcd4334f1367b9d15a080)
2.运行结果(见图2-8)
![](https://epubservercos.yuewen.com/39936E/13898203705421006/epubprivate/OEBPS/Images/42_2.jpg?sign=1738905376-oSV7PS79IeBb9On8c0XuUtBHjLnfw2MW-0-c33c61f6eb8fab9216140e5d08722164)
图2-8
3.代码精讲
我们可以看到,通过使用楔形完成了绘制圆环式饼图的任务。
(1)使用楔形绘制圆环式饼图的关键在于类Wedge中的参数width。使用参数width设置圆环的宽度,楔形的半径是以外圆的半径作为计算标准的,圆环的宽度就是外圆和内圆的半径差值。
(2)使用类Rectangle和实例方法text()绘制图例内容。