python数据可视化之饼图画法

  • 引入:

    什么是饼图?

     饼图英文学名为Sector Graph, 有名Pie Graph。常用于统计学模块。2D饼图为圆形,手画时,常用圆规作图。

     仅排列在工作表的一列一行中的数据可以绘制到饼图中。饼图显示一个数据系列 (数据系列:在图表中绘制的相关数据点,这些数据源自数据表的行或列。图表中的每个数据系列具有唯一的颜色或图案并且在图表的图例中表示。可以在图表中绘制一个或多个数据系列。饼图只有一个数据系列。)中各项的大小与各项总和的比例。饼图中的数据点 (数据点:在图表中绘制的单个值,这些值由条形、柱形、折线、饼图或圆环图的扇面、圆点和其他被称为数据标记的图形表示。相同颜色的数据标记组成一个数据系列。)显示为整个饼图的百分比。

     简单来说,饼图只有一个数据序列,可以清楚直观的反映出这个序列各个数据所占的比例

  • 第一种画法:
import numpy as np
import matplotlib.pyplot as plt
from pandas import Series,DataFrame
import pandas as pd
s = Series(data=np.random.randint(10,40,size=5),index=list('ABCDE'),name='饼图示例')

from matplotlib.pyplot import rcParams
# 解决 中文显示不出 
rcParams['font.sans-serif'] = 'kaiti'
# 解决 饼图 标题字体太小
rcParams['font.size'] = 20
# 解决 饼图整体太小
plt.figure(figsize=(8,6))
# fontsize 设置 饼图标签字体 autopct 显示 饼图所占比例 shadow 绘制阴影
# explode 突出某一块
s.plot(kind='pie',fontsize=15,autopct='%.1f%%',shadow=True,explode =[0.1,0,0,0,0])

  • 第二种画法:
import pandas as  pd
import matplotlib.pyplot as plt

df = DataFrame(data=np.random.randint(100,299,size=(3,3)),index=['商家A','商家B','商家C'],columns=['第一天','第二天','第三天'])

plt.figure(figsize=(12,9))
# 设置超级标题 即所有子图的标题 x y 设置标题的位置
plt.suptitle('各个商家三天销售情况',x=0.5,y=0.8)
# 创建一个子图 绘制 第一天 各商家销售情况
ax = plt.subplot(131)
ax.pie(df['第一天'],autopct='%.1f%%',labels=df.index,shadow=True,explode=[0.1,0,0])
ax.set_title('第1天')
# 创建一个子图 绘制 第二天 各商家销售情况
ax = plt.subplot(132)
ax.pie(df['第二天'],autopct='%.1f%%',labels=df.index,shadow=True,explode=[0,0.1,0])
ax.set_title('第2天')
# 创建一个子图 绘制 第三天 各商家销售情况
ax = plt.subplot(133)
ax.pie(df['第三天'],autopct='%.1f%%',labels=df.index,shadow=True,explode=[0,0,0.])
ax.set_title('第3天')
# 设置图例
plt.legend(df.index,loc=(1.2,0.5),title='商家',fontsize=12)
plt.show()

  • 第三种画法:
from pyecharts.charts import Pie
from pyecharts import options as opts
phone = ['小米', '三星', '华为', '苹果', '魅族', 'VIVO', 'OPPO']
value = np.random.randint(100,200,size=7).tolist()
# 注意 函数接收的类型为 (x,y) 组成的列表
def pie_rich_label() -> Pie:
    c = (
        Pie()
        .add(
            "",
            list(zip(phone,value)),
            label_opts=opts.LabelOpts(
                position="outside",
                # b 表示 手机名 c 表示该手机对应的数量 d表示占比
                formatter="{b|{b}: }{c}  {per|{d}%}  ",
                background_color="#eee",
                border_color="#aaa",
                border_width=1,
                border_radius=4,
                # pyecharts 强大的一点 可以使用 调用富文本 
                rich={
                    "b": {"fontSize": 16, "lineHeight": 33},
                    "per": {
                        "color": "#eee",
                        "backgroundColor": "#334455",
                        "padding": [2, 4],
                        "borderRadius": 2,
                    },
                },
            ),
        )
        .set_global_opts(title_opts=opts.TitleOpts(title="某天各个手机销售饼图"))
    )
    return c
pie_rich_label().render_notebook()

:)

  • 6
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

aa.1735803

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值