• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Python实现双轴组合图表柱状图和折线图的具体流程

    Python绘制双轴组合的关键在plt库的twinx()函数,具体流程:

    1.先建立坐标系,然后绘制主坐标轴上的图表;

    2.再调用plt.twinx()方法;

    3.最后绘制次坐标轴图表。

    import cx_Oracle
    import xlrd
    import xlwt
    import matplotlib.pyplot as plt
    import numpy as np
    from matplotlib.ticker import FuncFormatter
    
    plt.rcParams['font.sans-serif']=['SimHei']
    plt.rcParams['axes.unicode_minus']=False
    #设置坐标轴数值以百分比(%)显示函数
    def to_percent(temp, position):
      return '%1.0f'%(1*temp) + '%'
    #字体设置
    font2 = {'family' : 'Times New Roman',
    'weight' : 'normal',
    'size'   : 25,
    }
    
    conn=cx_Oracle.connect('用户名/密码@IP:端口/数据库')
    c=conn.cursor()
    #sql查询语句,多行用()括起来
    sql_detail=("select substr(date1,6,10)date1,round(avg(r_qty))r_qty,round(avg(e_qty))e_qty,""round(avg(r_qty)/avg(e_qty),2)*100 userate,round(avg(uptime),2)*100 uptime from 表tp "
    "tp where 条件  "
    "group by date1 order by date1 ")  
                                  
    x=c.execute(sql_detail)
    #获取sql查询数据                         
    data=x.fetchall()
    #print(data)
    
    #新建Excel保存数据
    xl=xlwt.Workbook()
    ws=xl.add_sheet("ROBOT 30 DAYS MOVE ")
    #ws.write_merge(0,1,0,4,"ROBOT_30_DAYS_MOVE")
    for i,item in enumerate(data):
        for j,val in enumerate(item):
            ws.write(i,j,val)
    xl.save("E:\\ROBOT_30_DAYS_MOVE.xls")
    
    #读取Excel数据
    data1 = xlrd.open_workbook( "E:\\ROBOT_30_DAYS_MOVE.xls")
    sheet1=data1.sheet_by_index(0)
    
    date1=sheet1.col_values(0)
    r_qty=sheet1.col_values(1)
    e_qty=sheet1.col_values(2)
    userate=sheet1.col_values(3)
    uptime=sheet1.col_values(4)
    
    #空值处理
    for a in r_qty:
        if a=='':
            a=0
    for a in e_qty:
        if a=='':
            a=0
    for a in userate:
        if a=='':
            a=0
    for a in uptime:
        if a=='':
            a=0
    #将list元素str转int类型
    r_qty = list(map(int, r_qty))
    e_qty = list(map(int, e_qty))
    userate = list(map(int, userate))
    uptime = list(map(int, uptime))
    #添加平均值mean求平均
    r_qty.append(int(np.mean(r_qty))) 
    e_qty.append(int(np.mean(e_qty))) 
    userate.append(int(np.mean(userate))) 
    uptime.append(int(np.mean(uptime))) 
    date1.append('AVG')
    
    #x轴坐标
    x=np.arange(len(date1))
    bar_width=0.35
    
    plt.figure(1,figsize=(19,10))
    #绘制主坐标轴-柱状图
    plt.bar(np.arange(len(date1)),r_qty,label='RBT_MOVE',align='center',alpha=0.8,color='Blue',width=bar_width)
    plt.bar(np.arange(len(date1))+bar_width,e_qty,label='EQP_MOVE',align='center',alpha=0.8,color='orange',width=bar_width)
    
    #设置主坐标轴参数
    plt.xlabel('')
    plt.ylabel('Move',fontsize=18)
    plt.legend(loc=1, bbox_to_anchor=(0,0.97),borderaxespad = 0.) 
    #plt.legend(loc='upper left')
    for x,y in enumerate(r_qty):
        plt.text(x,y+100,'%s' % y,ha='center',va='bottom')
    for x,y in enumerate(e_qty):
        plt.text(x+bar_width,y+100,'%s' % y,ha='left',va='top') 
    plt.ylim([0,8000])
    
    #调用plt.twinx()后可绘制次坐标轴
    plt.twinx()
    
    #次坐标轴参考线
    target1=[90]*len(date1)
    target2=[80]*len(date1)
    
    x=list(range(len(date1)))
    plt.xticks(x,date1,rotation=45)
    
    #绘制次坐标轴-折线图
    plt.plot(np.arange(len(date1)),userate,label='USE_RATE',color='green',linewidth=1,linestyle='solid',marker='o',markersize=3)
    plt.plot(np.arange(len(date1)),uptime,label='UPTIME',color='red',linewidth=1,linestyle='--',marker='o',markersize=3)
    
    plt.plot(np.arange(len(date1)),target1,label='90%target',color='black',linewidth=1,linestyle='dashdot')
    plt.plot(np.arange(len(date1)),target2,label='80%target',color='black',linewidth=1,linestyle='dashdot')
    
    #次坐标轴刻度百分比显示
    plt.gca().yaxis.set_major_formatter(FuncFormatter(to_percent))
    
    plt.xlabel('')
    plt.ylabel('Rate',fontsize=18)
    #图列
    plt.legend(loc=2, bbox_to_anchor=(1.01,0.97),borderaxespad = 0.) 
    plt.ylim([0,100])
    for x,y in enumerate(userate):
        plt.text(x,y-1,'%s' % y,ha='right',va='bottom',fontsize=14)
    for x,y in enumerate(uptime):
        plt.text(x,y+1,'%s' % y,ha='left',va='top',fontsize=14) 
    
    plt.title("ROBOT 30 DAYS MOVE")
    
    #图表Table显示plt.table()
    listdata=[r_qty]+[e_qty]+[userate]+[uptime]#数据
    table_row=['RBT_MOVE','EQP_MOVE','USE_RATE(%)','UPTIME(%)']#行标签
    table_col=date1#列标签
    print(listdata)
    print(table_row)
    print(table_col)
    
    the_table=plt.table(cellText=listdata,cellLoc='center',rowLabels=table_row,colLabels=table_col,rowLoc='center',colLoc='center')
    #Table参数设置-字体大小太小,自己设置
    the_table.auto_set_font_size(False)
    the_table.set_fontsize(12)
    #Table参数设置-改变表内字体显示比例,没有会溢出到表格线外面
    the_table.scale(1,3)
    #plt.show()
    
    plt.savefig(r"E:\\ROBOT_30_DAYS_MOVE.png",bbox_inches='tight')
    #关闭SQL连接
    c.close()                                                      
    conn.close()

    结果显示:

    到此这篇关于Python实现双轴组合图表柱状图和折线图的具体流程的文章就介绍到这了,更多相关python柱状图和折线图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    您可能感兴趣的文章:
    • 用Python做个个性的动画挂件让桌面不单调
    • 如何用Python写一个简单的通讯录
    • python实现多个视频文件合成画中画效果
    • 自己用python做的一款超炫酷音乐播放器
    • Python做个自定义动态壁纸还可以放视频
    • 分析总结Python数据化运营KMeans聚类
    • python中的zip模块
    • 总结分析python数据化运营关联规则
    • python项目--使用Tkinter的日历GUI应用程序
    • 如何使用Python做个自定义动态壁纸
    上一篇:用Python做个个性的动画挂件让桌面不单调
    下一篇:如何使用Python做个自定义动态壁纸
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Python实现双轴组合图表柱状图和折线图的具体流程 Python,实现,双轴,组合,图表,