双y轴坐标轴图
今天利用matplotlib
绘图,想要完成一个双坐标格式的图。
1 2 3 4 5 |
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) |
横坐标设置时间间隔
1 2 3 |
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')) |
纵坐标设置显示百分比
1 2 3 4 |
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为刻度注释。1
Title为标题。Axis为坐标轴,Label为坐标轴标注。Tick为刻度线,Tick Label为刻度注释。
add_subplot()
- 官网matplotlib.pyplot.figure
pyplot.figure()
是返回一个Figure
对象的,也就是一张图片。 - add_subplot(args, *kwargs)
The Axes instance will be returned.
twinx()
1 |
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()
- class matplotlib.dates.DateFormatter(fmt, tz=None)
这是一个类,创建一个时间格式的实例。
strftime方法(传入格式化字符串)。
1 2 3 |
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
1 2 3 4 5 6 7 8 9 |
# 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') ) |
代码汇总
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
#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'/',' ')), |