十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
双y轴坐标轴图

成都创新互联公司是一家专注于成都网站设计、成都做网站、外贸网站建设与策划设计,龙山网站建设哪家好?成都创新互联公司做网站,专注于网站建设十多年,网设计领域的专业建站公司;建站业务涵盖:龙山等地区。龙山做网站价格咨询:13518219792
今天利用matplotlib绘图,想要完成一个双坐标格式的图。
- fig=plt.figure(figsize=(20,15))
 - ax1=fig.add_subplot(111)
 - ax1.plot(demo0719['TPS'],'b-',label='TPS',linewidth=2)
 - ax2=ax1.twinx()#这是双坐标关键一步
 - ax2.plot(demo0719['successRate']*100,'r-',label='successRate',linewidth=2)
 
横坐标设置时间间隔
- import matplotlib.dates as mdate
 - ax1.xaxis.set_major_formatter(mdate.DateFormatter('%Y-%m-%d %H:%M:%S'))#设置时间标签显示格式
 - plt.xticks(pd.date_range(demo0719.index[0],demo0719.index[-1],freq='1min'))
 
纵坐标设置显示百分比
- import matplotlib.ticker as mtick
 - fmt='%.2f%%'
 - yticks = mtick.FormatStrFormatter(fmt)
 - ax2.yaxis.set_major_formatter(yticks)
 
知识点
在matplotlib中,整个图像为一个Figure对象。在Figure对象中可以包含一个,或者多个Axes对象。每个Axes对象都是一个拥有自己坐标系统的绘图区域。其逻辑关系如下:
一个Figure对应一张图片。
Title为标题。Axis为坐标轴,Label为坐标轴标注。Tick为刻度线,Tick Label为刻度注释。
Title为标题。Axis为坐标轴,Label为坐标轴标注。Tick为刻度线,Tick Label为刻度注释。
add_subplot()
The Axes instance will be returned.
twinx()
- ax = twinx()
 
create a twin of Axes for generating a plot with a sharex x-axis but independent y axis. The y-axis of self will have ticks on left and the returned axes will have ticks on the right.
意思就是,创建了一个独立的Y轴,共享了X轴。双坐标轴!
类似的还有twiny()
ax1.xaxis.set_major_formatter
Set the formatter of the major ticker
ACCEPTS: A Formatter instance
DateFormatter()
strftime方法(传入格式化字符串)。
- strftime(dt, fmt=None)
 - Refer to documentation for datetime.strftime.
 - fmt is a strftime() format string.
 
FormatStrFormatter()
Use a new-style format string (as used by str.format()) to format the tick. The field formatting must be labeled x
定义字符串格式。
plt.xticks
- # return locs, labels where locs is an array of tick locations and
 - # labels is an array of tick labels.
 - locs, labels = xticks()
 - # set the locations of the xticks
 - xticks( arange(6) )
 - # set the locations and labels of the xticks
 - xticks( arange(5), ('Tom', 'Dick', 'Harry', 'Sally', 'Sue') )
 
代码汇总
- #coding:utf-8
 - import matplotlib.pyplot as plt
 - import matplotlib as mpl
 - import matplotlib.dates as mdate
 - import matplotlib.ticker as mtick
 - import numpy as np
 - import pandas as pd
 - import os
 - mpl.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
 - mpl.rcParams['axes.unicode_minus']=False #用来正常显示负号
 - mpl.rc('xtick', labelsize=20) #设置坐标轴刻度显示大小
 - mpl.rc('ytick', labelsize=20)
 - font_size=30
 - #matplotlib.rcParams.update({'font.size': 60})
 - %matplotlib inline
 - plt.style.use('ggplot')
 - data=pd.read_csv('simsendLogConvert_20160803094801.csv',index_col=0,encoding='gb2312',parse_dates=True)
 - columns_len=len(data.columns)
 - data_columns=data.columns
 - for x in range(0,columns_len,2):
 - print('第{}列'.format(x))
 - total=data.ix[:,x]
 - print('第{}列'.format(x+1))
 - successRate=(data.ix[:,x+1]/data.ix[:,x]).fillna(0)
 - yLeftLabel=data_columns[x]
 - yRightLable=data_columns[x+1]
 - print('------------------开始绘制类型{}曲线图------------------'.format(data_columns[x]))
 - fig=plt.figure(figsize=(25,20))
 - ax1=fig.add_subplot(111)
 - #绘制Total曲线图
 - ax1.plot(total,color='#4A7EBB',label=yLeftLabel,linewidth=4)
 - # 设置X轴的坐标刻度线显示间隔
 - ax1.xaxis.set_major_formatter(mdate.DateFormatter('%Y-%m-%d %H:%M:%S'))#设置时间标签显示格式
 - plt.xticks(pd.date_range(data.index[0],data.index[-1],freq='1min'))#时间间隔
 - plt.xticks(rotation=90)
 - #设置双坐标轴,右侧Y轴
 - ax2=ax1.twinx()
 - #设置右侧Y轴显示百分数
 - fmt='%.2f%%'
 - yticks = mtick.FormatStrFormatter(fmt)
 - # 绘制成功率图像
 - ax2.set_ylim(0,110)
 - ax2.plot(successRate*100,color='#BE4B48',label=yRightLable,linewidth=4)
 - ax2.yaxis.set_major_formatter(yticks)
 - ax1.set_xlabel('Time',fontsize=font_size)
 - ax1.set_ylabel(yLeftLabel,fontsize=font_size)
 - ax2.set_ylabel(yRightLable,fontsize=font_size)
 - legend1=ax1.legend(loc=(.02,.94),fontsize=16,shadow=True)
 - legend2=ax2.legend(loc=(.02,.9),fontsize=16,shadow=True)
 - legend1.get_frame().set_facecolor('#FFFFFF')
 - legend2.get_frame().set_facecolor('#FFFFFF')
 - plt.title(yLeftLabel+'&'+yRightLable,fontsize=font_size)
 - plt.savefig('D:\\JGT\\Work-YL\\01布置的任务\\04绘制曲线图和报告文件\\0803\\出图\\{}-{}'.format(yLeftLabel.replace(r'/',' '),yRightLable.replace(r'/',' ')),dpi=300)
 
参考