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

Python绘制双轴组合的关键在plt库的twinx()函数,具体流程:
1.先建立坐标系,然后绘制主坐标轴上的图表;
2.再调用plt.twinx()方法;
3.最后绘制次坐标轴图表。

import cx_Oracleimport xlrdimport xlwtimport matplotlib.pyplot as pltimport numpy as npfrom matplotlib.ticker import FuncFormatterplt.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=https://www.it610.com/article/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=0for a in e_qty:if a=='':a=0for a in userate:if a=='':a=0for 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.35plt.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=https://www.it610.com/article/[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柱状图和折线图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    推荐阅读