大家好,从今天起,我们将开始更新Matplotlib
进阶饼图图鉴。本文将讲解以下二个进阶的饼图绘制方法。
进阶饼图-007
下面我们就来讲解如何绘制第一个进阶饼图,注意,代码在以下环境全部通过测试:
- Python 3.7.1
- Matplotlib == 3.3.2
- pandas == 1.2.0
- numpy == 1.19.2
因版本不同,可能会有部分语法差异,如有报错,请先检查拼写及版本是否一致!
首先导入相关库并查看版本
import matplotlib
print(matplotlib.__version__) #查看Matplotlib版本
import pandas as pd
print(pd.__version__) #查看pandas版本
import numpy as np
print(np.__version__) #查看numpy版本
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']#设置中文
mac系统推荐直接使用以下
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['STHeiti'] #mac自带中文
接着我们使用一组虚拟的数据进行画图。我们可以看到该图主要的构图思维是让后面占比小的分割块渐渐脱离圆心便于可视化对比。在此我们调整在plt.pie
中的explode
参数设置。
plt.figure(figsize=(8,9))
data = [100,90,80,70,60,50,40,30,20,10,7,5]
labels = ['A','B','C','D','E','F','G','H','I','J','K','L']
colors =['#ffcdd2','#ef9a9a','#F8BBD0','#F48FB1','#E1BEE7','#CE93D8','#D1C4E9','#B39DDB','#C5CAE9','#9FA8DA','#BBDEFB','#90CAF9']
explode = (0,0,0,0,0,0.3,0.4,0.5,0.7,0.9,1.1,1.2)
接下来我们开始绘图, l_text
、 p_text
分别表示外面对应的label和标在分割块上的百分比。在此我们分别把他们取出来建立循环对其调整大小。在plt.legend()
中使用bbox_to_anchor
进行调整图例的位置。
patches,l_text,p_text = plt.pie(data,
explode=explode,
labels=labels,
colors=colors,
autopct = '%1.1f%%',
shadow = True, #设置阴影设置
startangle = 0
)
plt.legend(patches, labels,
loc="center left",
bbox_to_anchor=(1, 0.2, 1, 1),
fontsize=15)
for t in l_text:
t.set_size(15)
for t in p_text:
t.set_size(12)
plt.title("进阶饼图-增加分割块",fontsize = 25)
plt.axis('equal')
plt.show()
进阶饼图-008
接下来我们再来讲解如何绘制南丁格尔玫瑰图。
在此我们希望去得到一个渐变红色系的南丁格尔玫瑰图。首先,我们根据需要划割的花瓣个数对选择对颜色进行预处理。
import matplotlib as mpl
r = [300,290,280,270,260,250,240,230,220,210,200,190,180,170,160,150,140,130,120]
#颜色预处理
r = pd.DataFrame(r)
N= r.shape[0]
width= 2*np.pi/N
rad = np.cumsum([width]* N) - width/2
cm = mpl.cm.get_cmap('Reds')
colors = cm((rad - rad.min())/ (rad.max()-rad.min()))[::-1]
我们所绘制的南丁格尔玫瑰图建立在ax = plt.subplot(111, projection='polar')
极坐标图之上。我们使用ax.set_theta_direction(-1)
去设置画图的顺序为顺时针。ax.set_theta_zero_location('N')
北部为0度开始画图。
fig = plt.figure(figsize=(8,9))
ax = plt.subplot(111, projection='polar')
ax.set_theta_direction(-1)
ax.set_theta_zero_location('N')
r = [300,290,280,270,260,250,240,230,220,210,200,190,180,170,160,150,140,130,120]
theta = np.linspace(0, np.pi*2, len(r), endpoint = False) # 360度等分成n份
patches = ax.bar(theta, r,
width = 0.3,
color = colors,
align = 'edge',
bottom = 100)
ax.text(np.pi*3/2-0.25, 90, '南丁格尔玫瑰', fontsize = 15)
for angle, height in zip(theta, r):
ax.text(angle+0.1, height+130, str(height),
fontsize = 15)
plt.legend(patches, labels,
loc="center left",
bbox_to_anchor=(1.1, 0.3, 1, 1),
fontsize=15)
plt.title("进阶饼图 - 南丁格尔玫瑰图",fontsize = 20)
plt.axis('off')
plt.tight_layout()
plt.show()
以上就是本期两幅图鉴的全部内容,更多精美图标欢迎关注后续更新。
以上代码均已通过测试,如有报错,请先检查拼写与版本,若在某个版本中需要修改,欢迎在留言区中指出。对于本篇内容有任何问题欢迎也请一定给我留言,谢谢!
-END-