Matplotlib绘图双纵坐标轴设置及控制设置时间格式

双y轴坐标轴图

今天利用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 mdateax1.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 mtickfmt='%.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()

  1. 官网matplotlib.pyplot.figure
    pyplot.figure()是返回一个Figure对象的,也就是一张图片。

  2. add_subplot(args, *kwargs)

The Axes instance will be returned.

twinx()

  1. matplotlib.axes.Axes method2
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

  1. set_major_formatter(formatter)

Set the formatter of the major ticker
ACCEPTS: A Formatter instance

DateFormatter()

  1. class matplotlib.dates.DateFormatter(fmt, tz=None)
    这是一个类,创建一个时间格式的实例。

strftime方法(传入格式化字符串)。

strftime(dt, fmt=None)Refer to documentation for datetime.strftime.fmt is a strftime() format string.

FormatStrFormatter()

  1. class matplotlib.ticker.FormatStrFormatter(fmt)

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. matplotlib.pyplot.xticks(args, *kwargs)
# 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 xticksxticks( arange(6) )# set the locations and labels of the xticksxticks( arange(5), ('Tom', 'Dick', 'Harry', 'Sally', 'Sue') )

代码汇总

# coding:utf-8import matplotlib.pyplot as plt import matplotlib as mplimport matplotlib.dates as mdateimport matplotlib.ticker as mtickimport numpy as npimport pandas as pdimport osmpl.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 inlineplt.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.columnsfor 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)

参考

  1. Vami-绘图: matplotlib核心剖析 ↩

  2. Secondary axis with twinx(): how to add to legend? ↩

关键字:Python, 坐标, xticks, import

版权声明

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部