编辑器:jupyter notebook
一、简单图表
1. 单条折线图
import matplotlib.pyplot as plt
# plt.plot(*args, scalex=True, scaley=True, data=None, **kwargs)
x = [1, 2, 3, 4, 5] # numpy 或 pandas 的数据结构均可
y = [2, 4, 6, 8, 10] # numpy 或 pandas 的数据结构均可
plt.plot(x, y)
plt.show()
2. 多条折线图
x = [1, 2, 3, 4, 5]
y1 = [2, 4, 6, 8, 10]
y2 = [3, 5, 7, 9, 11]
plt.plot(x, y1, '--')
plt.plot(x, y2, '-.')
plt.show()
3. 散点图
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]
plt.plot(x, y, '*')
plt.show()
二、图标配置
1. 默认配置
import pandas as pd
import matplotlib.pyplot as plt
1.1 rcParams
- runtime configuration Parameters
- 运行时配置参数
# 在线画图
%matplotlib inline
# 正常显示中文
plt.rcParams['font.sans-serif'] = 'SimHei'
# 正常显示负号
plt.rcParams['axes.unicode_minus'] = False
# 设置矢量图
%config Inlinebackend.figure_format = 'svg'
df = pd.read_excel('./data/plot.xlsx', sheet_name='sales')
df
x = df['日期'] # x轴数据
y = df['销量'] # y轴数据
plt.plot(x, y) # 折线图
plt.show()
2. 自定义配置
# plt.figure(
# num=None,
# figsize=None, ——————> 画布大小
# dpi=None, ——————> 分辨率
# facecolor=None, ——————> 画布背景颜色
# edgecolor=None, ——————> 设置边框颜色
# frameon=True,
# FigureClass=<class 'matplotlib.figure.Figure'>,
# clear=False,
# **kwargs,
# )
plt.figure(figsize=(5,3),dpi=200,facecolor='#eae4d1',edgecolor='red')
x = df['日期']
y = df['销量']
# color:调节线条颜色
# linestyle:线条样式
# linewidth:设置线条宽度
# marker:标记样式
# markersize:标记大小
# mfc:marker face color 标记的背景颜色
plt.plot(x,y,color='green',linestyle='-.',linewidth=2,marker='o',markersize=5,mfc='white')
# 添加标题
# plt.title(label, fontdict=None, loc=None, pad=None, *, y=None, **kwargs)
# label:设置标题
# loc:标题对齐方式,默认是剧中
# fontsize:设置标题字体大小
plt.title(label='2021年6月1号——25号销量折线图',loc='center',fontsize=10)
# 添加x轴标题(非刻度标签)
# plt.xlabel(xlabel, fontdict=None, labelpad=None, *, loc=None, **kwargs)
plt.xlabel('2021年6月')
# 添加y轴标题(非刻度标签)
# plt.ylabel(ylabel, fontdict=None, labelpad=None, *, loc=None, **kwargs)
# rotation:调节字的旋转角度
plt.ylabel('销量',rotation=0)
# 设置x轴刻度标签
# plt.xticks(ticks=None, labels=None, **kwargs)
labels = [str(x)+'日' for x in df['日期']]
plt.xticks(ticks=df['日期'],labels=labels,rotation=30)
# 设置x轴刻度范围
# plt.xlim(0,20)
# 设置y轴刻度范围
plt.ylim(0,120)
# 添加网格线
# plt.grid(b=None, which='major', axis='both', **kwargs)
# color:设置线的灰度0——1之间越大越浅
# linestyle:设置线的样式
# axis:设置x,y方向是否显示网格线
# linewidth:设置线的宽度
plt.grid(color='0.8',linestyle=':',axis='y',linewidth=1)
# 添加数据标签
# plt.text(x, y, s, fontdict=None, **kwargs)
# plt.text(x=8,y=100,s='94')
# 批量添加数据标签
for a,b in zip(x,y):
plt.text(x=a, # x坐标值
y=b+3, # y坐标值
s=b, # 数据标签内容
ha='center', # 水平剧中
va = 'bottom', # 垂直靠下
fontsize=8 # 设置字体大小
)
# 添加注释
# plt.annotate(text, xy, *args, **kwargs)
plt.annotate(
text='最高销量', # 注释内容
xy=(13,98), # 被注视的坐标点
xytext=(12,50), # 注释内容的坐标点
arrowprops={'width':1,'headwidth':4} # width:箭柄宽度;headwidth:箭头宽度;
)
# 添加图例(插入数据后再添加图例)
# plt.legend(*args, **kwargs)
plt.legend(fontsize=6,loc='upper left',labels=['成绩'])
# 保存图片(要在展示图片之前)
plt.savefig('./figure/02图标配置.png')
plt.show()
2.1 pyplot的常用配置及其说明
基础语法 | 说明 |
plt.figure | 创建空白画布,在一幅画中可省略 |
figure.add_subplot | 第一个参数表示行,第二个参数表示列,第三个参数表示选中的子图编号 |
plt.title | 标题 |
plt.xlabel | x轴名称 |
plt.ylabel | y轴名称 |
plt.xlim | x轴范围 |
plt.ylim | y轴范围 |
plt.xticks | 第一个参数为范围,数组类型;第二个参数是标签;第三个是控制标签 |
plt.yticks | 同 plt.xticks |
plt.legend | 图例 |
plt.savefig | 保护图形 |
plt.show | 在本机显示 |
2.2各样式说明
参数 | 参数值 | 描述 |
color | b | 蓝色 |
g | 绿色 | |
r | 红色 | |
y | 黄色 | |
k | 黑色 | |
w | 白色 | |
0.5 | 灰度 | |
linestyle | - | 实线 |
: | 虚线 | |
-- | 双划线 | |
-. | 点划线 | |
marker | . | 点 |
, | 像素 | |
o | 实心圆 | |
v | 倒三角 | |
^ | 上三角 | |
> | 右三角 | |
< | 左三角 | |
1 | 下花三角 | |
2 | 上花三角 | |
3 | 左花三角 | |
4 | 右花三角 | |
s | 实心正方形 | |
p | 实心五角星 | |
* | 星形 | |
h | 竖六边形 | |
H | 横六边形 | |
+ | 加号 | |
x | 叉号 | |
D | 大菱形 | |
d | 小菱形 | |
| | 垂直线 |
三、折线图
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
# 正常显示中文
plt.rcParams['font.sans-serif'] = 'SimHei'
# 正常显示负号
plt.rcParams['axes.unicode_minus'] = False
# 设置矢量图
%config Inlinebackend.figure_format = 'svg'
df = pd.read_excel('./data/plot.xlsx', sheet_name='line')
1. 准备数据
df
x,y1,y2,y3 = df['月份'],df['语文'],df['数学'],df['英语']
2. 绘制折线图
plt.figure(figsize=(5,3),dpi=200)
# mfc:marker face color,标记的背景颜色
# ms:marker size,标记的大小
# alpha:透明度,0—1
plt.plot(x,y1,label='语文',color='y',marker='+',mfc='w',ms=6,alpha=0.8)
plt.plot(x,y2,label='数学',color='b',marker='o',mfc='w',ms=6,alpha=0.8)
plt.plot(x,y3,label='英语',color='g',marker='*',mfc='w',ms=6,alpha=0.8)
# 添加水平线
plt.hlines(y=90,xmin=0,xmax=10,colors='red',linestyles=':')
# 添加网格
plt.grid(color='0.8',linestyle=':',axis='y',linewidth=1)
# 设置y轴值范围
plt.ylim(0,110)
# 设置标题
plt.title('各科成绩的折线图')
# 设置y轴标题
plt.ylabel('成绩',rotation=0)
# 添加图例
plt.legend()
plt.show()
四、柱形图
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
# 正常显示中文
plt.rcParams['font.sans-serif'] = 'SimHei'
# 正常显示负号
plt.rcParams['axes.unicode_minus'] = False
# 设置矢量图
%config Inlinebackend.figure_format = 'svg'
1. 简单柱形图
x = [1, 2, 3, 4, 5, 6]
y = [10, 20, 30, 40, 50, 60]
plt.bar(x, y)
plt.show()
2. 普通柱形图
df = pd.read_excel('./data/plot.xlsx', sheet_name='bar1')
df
x,y = df['年份'],df['销售额']
# 设置画布
plt.figure(figsize=(5,3),dpi=200)
# 添加标题
plt.title('14-20年销售额趋势')
plt.xlabel('年份')
plt.ylabel('销售额')
# 画图
plt.bar(x=x,height=y,width=0.5)
# 添加网格线
plt.grid(axis='y')
# 循环批量添加文本标签
for a,b in zip(x,y):
plt.text(x=a,y=b,s='{:.1f}万'.format(b/10000),ha='center',fontsize=8)
# 添加图例
plt.legend(['销售额'])
# 展示
plt.show()
3. 簇状柱形图
df = pd.read_excel('./data/plot.xlsx', sheet_name='bar2')
df
x,y1,y2,y3 = df['年份'],df['北区'],df['中区'],df['南区']
# 设置画布
plt.figure(figsize=(5,3),dpi=200)
# 添加标题
plt.title('14-20年各区销售额对比')
plt.xlabel('年份')
plt.ylabel('销售额')
# 画图
# 避免图形重叠,柱形图的宽度必须与x值的偏移量保持一致
width = 0.2
plt.bar(x-width,y1,width=width) # 北区
plt.bar(x,y2,width=width) # 中区
plt.bar(x+width,y3,width=width) # 南区
# 添加网格线
plt.grid(axis='y',color='0.9',linestyle=':')
# 添加图例
plt.legend(['北区','中区','南区'],fontsize=8,ncol=3)
# 展示
plt.show()
4. 堆积柱形图
x,y1,y2,y3 = df['年份'],df['北区'],df['中区'],df['南区']
# 设置画布
plt.figure(figsize=(5,3),dpi=200)
# 添加标题
plt.title('14-20年各区销售额对比')
plt.xlabel('年份')
plt.ylabel('销售额')
# 画图
plt.bar(x,y1,label='北区') # label 用于设置图例
plt.bar(x,y2,label='中区',bottom=y1)
plt.bar(x,y3,label='南区',bottom=y1+y2)
# 添加图例
plt.legend(ncol=3)
# 展示
plt.show()
五、直方图
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
# 正常显示中文
plt.rcParams['font.sans-serif'] = 'SimHei'
# 正常显示负号
plt.rcParams['axes.unicode_minus'] = False
# 设置矢量图
%config Inlinebackend.figure_format = 'svg'
1. 简单直方图
# 随机生成100个[0, 100)的整数
np.random.seed(1) # 随机种子
x = np.random.randint(0, 100, 100)
plt.hist(x, bins=range(0, 100, 10))
plt.show()
2. 绘制直方图
df = pd.read_excel('./data/plot.xlsx', sheet_name='hist')
df
# 建立画布
plt.figure(figsize=(5,3),dpi=200)
x = df['分数']
plt.title('数学成绩分布的直方图')
plt.xlabel('分数区间')
plt.ylabel('人数')
# 插入数据
plt.hist(x,bins=range(40,110,5),edgecolor='k',alpha=0.9) # bins 分组
# 设置x轴刻度
plt.xticks(ticks=range(40,110,5))
# 展示
plt.show()
df['分数'].kurt() # 峰度系数
# -0.14030776142606793
df['分数'].skew() # 偏度系数
# -0.1022012815059641
六、饼状图
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
# 正常显示中文
plt.rcParams['font.sans-serif'] = 'SimHei'
# 正常显示负号
plt.rcParams['axes.unicode_minus'] = False
# 设置矢量图
%config Inlinebackend.figure_format = 'svg'
1. 简单饼图
x = [10, 20, 30, 40]
plt.pie(x, autopct='%.2f%%')
plt.show()
2. 普通饼图
df = pd.read_excel('./data/plot.xlsx', sheet_name='pie1')
df
lables = df['省份']
sizes = df['销量']
plt.figure(figsize=(5,3),dpi=300)
plt.pie(
x=sizes,
labels=lables, # 分类标签
autopct='%.2f%%', # 百分比
textprops={'fontsize':5},
explode=(0.1,0.1,0,0,0,0,0,0,0,0), # 设置分裂
)
plt.title('省销量占比情况')
plt.show()
3. 单个圆环图
df = pd.read_excel('./data/plot.xlsx', sheet_name='pie1')
lables = df['省份']
sizes = df['销量']
plt.figure(figsize=(5,3),dpi=300)
plt.pie(
x=sizes,
labels=lables, # 分类标签
autopct='%.2f%%', # 百分比
textprops={'fontsize':5},
wedgeprops={'width':0.4,'edgecolor':'w'}, # width:圆环宽度,edgecolor:边框颜色
pctdistance=0.8 # 数据标签距离圆心的位置,0-1
)
plt.title('省销量占比情况')
plt.show()
4. 多个圆环图
df1 = pd.read_excel('./data/plot.xlsx', sheet_name='pie1')
df2 = pd.read_excel('./data/plot.xlsx', sheet_name='pie2')
df1
df2
x1 = df1['销量'] # 外圆环
x2 = df2['销量'] # 内圆环
plt.figure(figsize=(5,3),dpi=300)
# 外圆环
# 外圆的宽度 + 内圆的宽度 < 1
plt.pie(
x1,
autopct='%.1f%%',
textprops={'fontsize':4},
wedgeprops={'width':0.3,'edgecolor':'w'}, # width:圆环宽度,edgecolor:边框颜色
pctdistance=0.85, # 数据标签距离圆心的位置,0-1
labels = df1['省份']
)
# 内圆环
plt.pie(
x2,
autopct='%.1f%%',
radius=0.7, # 半径,默认是
textprops={'fontsize':4},
wedgeprops={'width':0.3,'edgecolor':'w'}, # width:圆环宽度,edgecolor:边框颜色
pctdistance=0.75 # 数据标签距离圆心的位置,0-1
)
plt.title('2021年1月与2月各省销售占比',fontsize=6)
# 添加图例
plt.legend(df1['省份'],fontsize=3)
plt.show()
七、散点图
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
%config Inlinebackend.figure_format = 'svg'
1. 简单散点图
x = range(1, 7, 1)
y1 = range(10, 70, 10)
y2 = range(15, 75, 10)
plt.scatter(x, y1, marker='*')
plt.scatter(x, y2, marker='+')
plt.show()
2. 绘制散点图
df = pd.read_excel('./data/plot.xlsx', sheet_name='scatter')
df
x,y = df['广告费用'],df['销售收入']
plt.figure(figsize=(5,3),dpi=300)
plt.scatter(x,y)
plt.title('广告费用与销售收入的相关性')
plt.xlabel('广告费用')
plt.ylabel('销售收入')
# 相关系数
text = '相关系数:' + str(round(df['广告费用'].corr(df['销售收入']),2))
plt.text(x=5000,y=90000,s=text)
plt.show()
八、面积图
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
%config Inlinebackend.figure_format = 'svg'
1. 简单面积图
x = [1, 2, 3, 4, 5]
# 随机生成5个[10,100)的整数
y = np.random.randint(10, 100, 5)
plt.stackplot(x, y)
plt.show()
2. 普通面积图
df = pd.read_excel('./data/plot.xlsx', sheet_name='stackplot1')
df
x,y = df['年份'],df['销售额']
plt.figure(figsize=(5,3),dpi=200)
plt.title('2014-2020年销售额趋势')
plt.stackplot(x,y)
# 去掉x轴刻度标签
plt.xticks([])
# 设置x轴的表格
# plt.table(
# cellText=None,
# cellColours=None,
# cellLoc='right',
# colWidths=None,
# rowLabels=None,
# rowColours=None,
# rowLoc='left',
# colLabels=None,
# colColours=None,
# colLoc='center',
# loc='bottom',
# bbox=None,
# edges='closed',
# **kwargs,
# )
plt.table(
cellText= df[['销售额']].T.values.tolist(), # 单元格内容,需要二维数据
rowLabels= ['销售额'], # 行标签
colLabels= df['年份'].values.tolist() # 列标签
)
plt.show()
3. 堆积面积图
df = pd.read_excel('./data/plot.xlsx', sheet_name='stackplot2')
df
x,y1,y2,y3 = df['年份'],df['北区'],df['中区'],df['南区']
plt.figure(figsize=(5,3),dpi=200)
plt.title('2014-2020年销售额趋势')
plt.stackplot(x,y1,y2,y3)
# 去掉x轴刻度标签
plt.xticks([])
# 设置x轴的表格
# apply:单列字符串格式化
# applymap:多列字符串格式化
# map:字典映射
plt.table(
cellText= df[['北区','中区','南区']].applymap(lambda x: '{:.1f}万'.format(x/10000)).T.values.tolist(), # 单元格内容,需要二维数据
rowLabels= ['北区','中区','南区'], # 行标签 ,一维
colLabels= df['年份'].values.tolist() # 列标签,一维
)
plt.legend(['北区','中区','南区'],fontsize=8,loc='upper left')
plt.show()
九、热力图
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
%config Inlinebackend.figure_format = 'svg'
1. 简单热力图
- 数据格式:列表内嵌列表
x = [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]] # 二维
plt.imshow(x)
plt.show()
2. 绘制热力图
df = pd.read_excel('./data/plot.xlsx', sheet_name='imshow')
df
# x轴刻度标签,产品
x = df.drop(labels='省份',axis=1).columns # 注意不要在原表修改
# y轴刻度标签,省份
y = df['省份']
# 热力图数据,多行多列
data = df.drop(labels='省份',axis=1).values
# 建立画布
plt.figure(figsize=(5,8),dpi=200)
# 插入数据
plt.imshow(data,cmap='Blues') # cmap:color map,颜色映射(视觉映射)
# 添加标签
for i in range(len(x)):
for j in range(len(y)):
plt.text(x=i,y=j,s=data[j,i],va='center',ha='center')
# 设置x轴刻度标签
plt.xticks(ticks=range(len(x)),labels=x)
# 设置y轴刻度标签
plt.yticks(ticks=range(len(y)),labels=y)
# 添加标题
plt.title('各省各产品销量热力图')
# 添加颜色条
plt.colorbar()
# 展示
plt.show()
3. 使用 seaborn 画热力图
import seaborn as sns
# 设置索引
tb = df.set_index('省份')
plt.figure(dpi=200)
# cmap:color map 颜色映射
# annot:注释,数据标签
# fmt:format,数据显示格式
# d:digit,整型
# .1f:浮点型
sns.heatmap(tb,cmap='Greens',annot=True,fmt='d')
plt.show()
十、箱线图
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
%config Inlinebackend.figure_format = 'svg'
1. 简单箱线图
x = [1, 2, 3, 5, 7, 9]
plt.boxplot(x)
plt.show()
2. 多组箱线图
# 随机生成100个[10,100)的整数
x1 = np.random.randint(10, 100, 100)
x2 = np.random.randint(10, 100, 100)
x3 = np.random.randint(10, 100, 100)
plt.boxplot([x1, x2, x3])
plt.show()
3. 绘制箱线图
- 数据格式:列表内嵌列表
- 检测异常值
df = pd.read_excel('./data/plot.xlsx', sheet_name='boxplot')
df.head()
labels = df['区域'].unique()
data = [df[df['区域']==i]['房价'].tolist() for i in labels]
# 建立画布
plt.figure(figsize=(5,3),dpi=200)
plt.boxplot(
x=data,
labels=labels,
whis=1.5, # 基于几倍的四分位距(IQR)来检测异常值
# 异常值的标记格式
flierprops={'markerfacecolor':'red', # 标记的背景颜色
'markeredgecolor':'red', # 标记的边框颜色
'markersize':4} # 标记的形状大小
)
# 展示
plt.show()
- 筛选异常值
Q1 = df['房价'].quantile(0.25)
Q3 = df['房价'].quantile(0.75)
IQR = Q3 - Q1
upper = min(Q3+1*IQR, df['房价'].max())
lower = max(Q1-1*IQR, df['房价'].min())
df[(df['房价'] > upper) | (df['房价'] < lower)]
# pandas实现箱线图
df.boxplot(column='房价',by='区域')
十一、雷达图
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
%config Inlinebackend.figure_format = 'svg'
df = pd.read_excel('./data/plot.xlsx', sheet_name='polar')
df.head()
1. 准备数据
# 求男女各科平均值
male = df[df['性别']=='男'].mean().round(1)
female = df[df['性别']=='女'].mean().round(1)
labels = df.drop(columns=['学号','性别']).columns
2. 生成雷达图的角度
# linspace 生成等差数组
# 6个科目6个角度值,180 =
angles = np.linspace(0,2*np.pi,6,endpoint=False)
angles
# array([0. , 1.04719755, 2.0943951 , 3.14159265, 4.1887902 , 5.23598776])
3. 首尾相连形成闭合的多边形
male = np.concatenate((male,[male[0]]))
female = np.concatenate((female,[female[0]]))
angles = np.concatenate((angles,[angles[0]]))
4. 绘制雷达图
# 建立画布
plt.figure(dpi=200)
# 画图
plt.polar(angles,male,'blue',label='男')
plt.polar(angles,female,'green',label='女')
# 设置数据标签
plt.thetagrids(angles=range(0,360,60),labels=labels)
plt.ylim(0,100)
plt.legend(fontsize=6)
# 展示
plt.show()
十二、多子图
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
%config Inlinebackend.figure_format = 'svg'
1. subplot函数
# # subplot(
# nrows, # 几行
# ncols, # 几列
# index, # 从1开始索引,第几个图
# **kwargs)
# 画第一个图
plt.subplot(2,2,1)
plt.title('A')
# 画第二个图
plt.subplot(2,2,2)
plt.title('B')
# 画第三个图
plt.subplot(2,2,3)
plt.title('C')
# 画第四个图
plt.subplot(2,2,4)
plt.title('D')
# 展示
plt.show()
2. 绘制多子图
- 第1个子图-折线图
- 第2个子图-饼图
- 第3个子图-柱形图
df = pd.read_excel('./data/plot.xlsx', sheet_name='subplot')
df.head()
# 设置画布
plt.figure(figsize=(5,8),dpi=200)
# 画第一个子图——折线图
plt.subplot(3,1,1)
# 提取月份
df['月份'] = df['订单日期'].dt.month
# 按月份分组聚合
df1 = df.groupby('月份').agg({'销售额':'sum'}).reset_index()
# 画图
plt.plot(df1['月份'],df1['销售额'],label='销售额')
plt.title('各月的销售额趋势')
plt.xlabel('月份')
# 设置x轴刻度
plt.xticks(range(len(df1['月份'])+1))
# 设置y轴刻度范围
plt.ylim(0,max(df1['销售额'])+50000)
# 设置紧凑布局,避免重叠
plt.tight_layout()
# 画第二个子图——饼图
plt.subplot(3,1,2)
df2 = df.groupby('产品类别').agg({'销售额':'sum'}).reset_index()
plt.title('各产品销售额占比')
plt.pie(x=df2['销售额'],labels=df2['产品类别'],autopct='%.2f%%',wedgeprops={'edgecolor':'white'})
# 设置紧凑布局,避免重叠
plt.tight_layout()
# 画第三个子图——柱形图
plt.subplot(3,1,3)
df3 = df.groupby('地区').agg({'销售额':'sum'}).reset_index()
plt.bar(x=df3['地区'],height=df3['销售额'])
plt.title('各区的销售额对比')
for x,y in zip(df3['地区'],df3['销售额']):
plt.text(x=x,y=y,s='{:.1f}万'.format(y/10000),ha='center')
# 设置紧凑布局,避免重叠
plt.tight_layout()
# 展示
plt.show()