(๑•͈ᴗ•͈)❀送花给你

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()

 

posted @ 2021-10-09 16:22  胸前小红花  阅读(301)  评论(0)    收藏  举报