python:制作常用图表
柱形图
import xlwings as xw
#制作柱形图/条形图
def demo_Func():
app=xw.App(visible=True,add_book=False) #启动excel程序
workbook=app.books.open('销售统计表.xlsx') #打开要制作图表的工作簿
for i in workbook.sheets:#遍历工作簿中的工作表
chart=i.charts.add(left=200,top=0,width=355,height=211)#设置图表位置,尺寸
chart.set_source_data((i['A1']).expand())
chart.chart_type='column_clustered' #制作柱形图 'bar_clustered'条形图
workbook.save('柱形图.xlsx')#另存工作簿
workbook.close()#关闭工作簿
app.quit()#退出程序

制作折线图
import pandas as pd
import matplotlib as plt
import xlwings as xw
#制作折线图展示数据变化趋势
def demo_Func2():
df=pd.read_excel('销售统计表.xlsx')
figure=plt.figure() #创建一个绘图窗口
plt.rcParams['font.sans-serif']=['SimHei']#为中文文本设置默认字体,避免中文显示乱码
plt.rcParams['axes.unicode_minus']=False #解决坐标值为负数,无法显示负号的问题
x=df['月份']
y=df['销售额']
plt.plot(x,y,color='red',linewidth=3,linestyle='solid')#制作折线图
plt.title(label='月销售趋势图',fontdict={'color':'black','size':30},loc='center')
#为最高点添加数据
#begin
max1=df['销售额'].max()#获取最高销售额
df_max=df[df['销售额']==max1]#获取最高销售额对应的行数据
#end
for a,b in zip(x,y):#遍历折线图的每一个数据点
plt.text(a,b+0.2,(a,'%.0f'%b),ha='center',va='bottom',fontsize=10) #添加并设置数据标签
plt.axis('off') #隐藏坐标轴
app=xw.App(visible=False) #启动Excel程序
workbook=app.books.open('销售统计表.xlsx')
worksheet=workbook.sheets['Sheet1']#选中工作表“Sheet1”
worksheet.pictures.add(figure,name='图片1',update=True,left=200)#在工作表中插入制作的折线图
workbook.save('折线图.xlsx')
workbook.close()
app.quit()
制作散点图
#制作散点图
def demo_Func3():
df=pd.read_excel('销售统计表.xlsx')
figure=plt.figure() #创建一个绘图窗口
plt.rcParams['font.sans-serif']=['SimHei']#为中文文本设置默认字体,避免中文显示乱码
plt.rcParams['axes.unicode_minus']=False #解决坐标值为负数,无法显示负号的问题
x=df['月份']
y=df['销售额']
plt.scatter(x,y,s=400,color='red',maker='o',edgecolor='black')#制作散点图
plt.xlabel('x字段',fontdict={'family':'Microsoft YaHei','color':'black','size':20},labelpad=20)#设置x轴标题
plt.ylabel('y字段', fontdict={'family': 'Microsoft YaHei', 'color': 'black', 'size': 20}, labelpad=20) # 设置x轴标题
app=xw.App(visible=False)
workbook = app.books.open('销售统计表.xlsx')
worksheet = workbook.sheets['Sheet1'] # 选中工作表“Sheet1”
worksheet.pictures.add(figure, name='图片1', update=True, left=200)
workbook.save('散点图.xlsx')
workbook.close()
app.quit()

散点图
from sklearn import linear_model #添加线性趋势线
#制作散点图
def demo_Func3():
df=pd.read_excel('销售统计表.xlsx')
figure=plt.figure() #创建一个绘图窗口
plt.rcParams['font.sans-serif']=['SimHei']#为中文文本设置默认字体,避免中文显示乱码
plt.rcParams['axes.unicode_minus']=False #解决坐标值为负数,无法显示负号的问题
x=df['月份']
y=df['销售额']
plt.scatter(x,y,s=400,color='red',maker='o',edgecolor='black')#制作散点图
plt.xlabel('x字段',fontdict={'family':'Microsoft YaHei','color':'black','size':20},labelpad=20)#设置x轴标题
plt.ylabel('y字段', fontdict={'family': 'Microsoft YaHei', 'color': 'black', 'size': 20}, labelpad=20) # 设置x轴标题
#为散点图添加线性趋势
#begin
plt.title('图表题目',fontdict={'family':'Microsoft YaHei', 'color': 'black', 'size': 30},loc='center')
model=linear_model.LinearRegression().fit(x.values.reshape(-1,1),y)
pred=model.predict(x.values.reshape(-1,1))
#end
app=xw.App(visible=False)
workbook = app.books.open('销售统计表.xlsx')
worksheet = workbook.sheets['Sheet1'] # 选中工作表“Sheet1”
worksheet.pictures.add(figure, name='图片1', update=True, left=200)
workbook.save('散点图.xlsx')
workbook.close()
app.quit()
制作气泡图
#制作气泡图
def demo_Func4():
df=pd.read_excel('销售统计表.xlsx')
figure=plt.figure() #创建一个绘图窗口
plt.rcParams['font.sans-serif']=['SimHei']#为中文文本设置默认字体,避免中文显示乱码
plt.rcParams['axes.unicode_minus']=False #解决坐标值为负数,无法显示负号的问题
x=df['月份']
y=df['销售额']
z=df['进货量']
plt.scatter(x,y,s=y*100,color='red',maker='o')#制作气泡图
plt.xlabel('x字段', fontdict={'family': 'Microsoft YaHei', 'color': 'black', 'size': 20}, labelpad=20) # 设置x轴标题
plt.ylabel('y字段', fontdict={'family': 'Microsoft YaHei', 'color': 'black', 'size': 20}, labelpad=20) # 设置x轴标题
plt.title('图表题目', fontdict={'family': 'Microsoft YaHei', 'color': 'black', 'size': 30}, loc='center')
for a,b,c in zip(x,y,z):
plt.text(a,b,c,ha='center',va='center',fontsize=30,color='white')
plt.xlim(0,800)
plt.ylim(0,120)
app=xw.App(visible=False)
workbook=app.books.open('气泡图.xlsx')
worksheet = workbook.sheets['Sheet1'] # 选中工作表“Sheet1”
worksheet.pictures.add(figure, name='图片1', update=True, left=200)
workbook.save('气泡图.xlsx')
workbook.close()
app.quit()
饼状图
#制作饼状图
def demo_Func5():
df=pd.read_excel('销售统计表.xlsx')
figure=plt.figure() #创建一个绘图窗口
plt.rcParams['font.sans-serif']=['SimHei']#为中文文本设置默认字体,避免中文显示乱码
plt.rcParams['axes.unicode_minus']=False #解决坐标值为负数,无法显示负号的问题
x=df['月份']
y=df['销售额']
plt.pie(y,labels=x,labeldistance=1.1,autopct='%.2f%%',pctdistance=0.8,startangle=90,radius=1.0,explode=[0,0,0,0,0,0.3,0])
plt.title(label='销售占比图',fontdict={'color':'black','size':30},loc='center')#添加并设置图表标题
app=xw.App(visible=False)
workbook=app.books.open('气泡图.xlsx')
worksheet = workbook.sheets['Sheet1'] # 选中工作表“Sheet1”
worksheet.pictures.add(figure, name='图片1', update=True, left=200)
workbook.save('气泡图.xlsx')
workbook.close()
app.quit()

圆环图
将上个代码中的plt.pie换为下面的代码
plt.pie(y, labels=x, autopct='%.2f%%', pctdistance=0.85, radius=1.0,labeldistance=1.1,wedgeprops={'width':0.3,'linewidth':2,'edgecolor':'white'})
雷达图
用来对比多项指标
df = pd.read_excel('销售统计表.xlsx')
df=df.set_index('性能评价指标')#将数据中的“性能评价指标”列设置成行索引
df=df.T #转置数据表格
df.index.name='品牌'#将转置后数据中行索引那一列的名称修改为“品牌”
def plot_radar(data,feature):#自定义函数用于制作雷达图
plt.rcParams['font.sans-serif']=['SimHei']#为中文文本设置默认字体,避免中文显示乱码
plt.rcParams['axes.unicode_minus']=False #解决坐标值为负数,无法显示负号的问题
cols=['动力性','燃油经济性','制动性','操控稳定性','行驶平顺性','通过性','安全性','环保型']#指定各个品牌要显示的性能评价指标的名称
colors=['green','blue','red','yellow']#为每个品牌设置图表中的显示颜色
angles=np.linspace(0.1*np.pi,2.1*np.pi,len(cols),endpoint=False)#根据要显示的指标个数对圆形进行切分
angles=np.concatenate((angles,[angles[0]]))#设置刻度线数据
fig=plt.figure(figsize=(8,8))#设置显示图表的窗口大小
ax=fig.add_subplot(111,polar=True)#设置图表在窗口中的显示位置,并设置坐标轴为极坐标体系
for i,c in enumerate(feature): #此函数将可遍历的数据对象转化为一个索引序列
stats=data.loc[c] #获取品牌对应的指标数据
stats=np.concatenate((stats,[stats[0]]))#连接品牌的指标数据
ax.plot(angles,stats,'-',linewidth=6,c=colors[i],label='%s'%(c))#制作雷达图
ax.fill(angles,stats,color=colors[i],alpha=0.25)#为雷达图填充颜色
ax.legend()#为雷达图添加图例
ax.set_yticklabels([])#隐藏坐标轴数据
ax.set_thetagrids(angles*180/np.pi,cols,fontsize=16)#添加并设置数据标签
plt.show()#显示制作的雷达图
return fig
fig=plot_radar(df,['A品牌','B品牌','C品牌','D品牌'])#调用函数制作雷达图
温度计图
def demo_Func7():
df = pd.read_excel('销售统计表.xlsx')
sum=0 #存储全年的销售业绩
for i in range(12):
sum += df['销售业绩'][i]
goal=df['销售业绩'][13]#获取全年的目标销售业绩
percentage=sum/goal
plt.bar(1,1,color='yellow')
plt.bar(1,percentage,color='cyan')
plt.xlim(0,2)
plt.ylim(0,1.2)#设置图表y轴的取值范围 参数1:最小值 参数2:最大值
plt.text(1,percentage-0.01,percentage,ha='center',va='top',fontdict={'color':'black','size':20})#添加并设置数据标签
plt.show()

浙公网安备 33010602011771号