引入:
什么是饼图?
饼图英文学名为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()
:)