matplotlib 饼图 dataframe_Matplotlib图鉴进阶饼图两张

1a3f923e6a845f265bdf9d8348a73305.gif

大家好,从今天起,我们将开始更新Matplotlib进阶饼图图鉴。本文将讲解以下二个进阶的饼图绘制方法。43d218379172e358c32709fac303027b.pngeba81eec90f40699dd36447f891f3c31.png

进阶饼图-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_textp_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()
43d218379172e358c32709fac303027b.png

进阶饼图-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()
eba81eec90f40699dd36447f891f3c31.png

以上就是本期两幅图鉴的全部内容,更多精美图标欢迎关注后续更新。

以上代码均已通过测试,如有报错,请先检查拼写与版本,若在某个版本中需要修改,欢迎在留言区中指出。对于本篇内容有任何问题欢迎也请一定给我留言,谢谢!

-END-

2a5839a8ba70dd3c3a627e25c8da4379.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值