添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
力能扛鼎的吐司  ·  camunda_06_quickstart_ ...·  1 年前    · 
高大的桔子  ·  Fabric.js ...·  1 年前    · 
俊逸的罐头  ·  WIFI(1)WIFI直连 + ...·  1 年前    · 
注册/登录

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

开发 开发工具
今天利用matplotlib绘图,想要完成一个双坐标格式的图。

双y轴坐标轴图

今天利用matplotlib绘图,想要完成一个双坐标格式的图。

  1. fig=plt.figure(figsize=(20,15)) 
  2. ax1=fig.add_subplot(111) 
  3. ax1.plot(demo0719['TPS'],'b-',label='TPS',linewidth=2) 
  4. ax2=ax1.twinx()#这是双坐标关键一步 
  5. ax2.plot(demo0719['successRate']*100,'r-',label='successRate',linewidth=2)  

横坐标设置时间间隔

  1. import matplotlib.dates as mdate 
  2. ax1.xaxis.set_major_formatter(mdate.DateFormatter('%Y-%m-%d %H:%M:%S'))#设置时间标签显示格式 
  3. plt.xticks(pd.date_range(demo0719.index[0],demo0719.index[-1],freq='1min'))  

纵坐标设置显示百分比

  1. import matplotlib.ticker as mtick 
  2.  
  3. fmt='%.2f%%' 
  4.  
  5. yticks = mtick.FormatStrFormatter(fmt) 
  6.  
  7. 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()

  • 官网matplotlib.pyplot.figure
    pyplot.figure()是返回一个Figure对象的,也就是一张图片。
  • add_subplot(args, *kwargs)
  • The Axes instance will be returned.

    twinx()

  • matplotlib.axes.Axes method2
    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_major_formatter(formatter)
  • Set the formatter of the major ticker

    ACCEPTS: A Formatter instance

    DateFormatter()

  • class matplotlib.dates.DateFormatter(fmt, tz=None)
    这是一个类,创建一个时间格式的实例。
  • strftime方法(传入格式化字符串)。

    1. strftime(dt, fmt=None) 
    2.  
    3. Refer to documentation for datetime.strftime. 
    4.  
    5. fmt is a strftime() format string. 

    FormatStrFormatter()

  • 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

  • matplotlib.pyplot.xticks(args, *kwargs)
    1. return locs, labels where locs is an array of tick locations and 
    2. # labels is an array of tick labels. 
    3. locs, labels = xticks() 
    4.  
    5. set the locations of the xticks 
    6. xticks( arange(6) ) 
    7.  
    8. set the locations and labels of the xticks 
    9. xticks( arange(5), ('Tom''Dick''Harry''Sally''Sue') ) 
    1. #coding:utf-8 
    2.  
    3. import matplotlib.pyplot as plt 
    4.  
    5. import matplotlib as mpl 
    6.  
    7. import matplotlib.dates as mdate 
    8.  
    9. import matplotlib.ticker as mtick 
    10.  
    11. import numpy as np 
    12.  
    13. import pandas as pd 
    14.  
    15. import os 
    16.  
    17. mpl.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签 
    18.  
    19. mpl.rcParams['axes.unicode_minus']=False #用来正常显示负号 
    20.  
    21. mpl.rc('xtick', labelsize=20) #设置坐标轴刻度显示大小 
    22.  
    23. mpl.rc('ytick', labelsize=20) 
    24.  
    25. font_size=30 
    26.  
    27. #matplotlib.rcParams.update({'font.size': 60}) 
    28.  
    29. %matplotlib inline 
    30.  
    31. plt.style.use('ggplot'
    32.  
    33. data=pd.read_csv('simsendLogConvert_20160803094801.csv',index_col=0,encoding='gb2312',parse_dates=True
    34.  
    35. columns_len=len(data.columns) 
    36.  
    37. data_columns=data.columns 
    38.  
    39. for x in range(0,columns_len,2): 
    40.  
    41. print('第{}列'.format(x)) 
    42.  
    43. total=data.ix[:,x] 
    44.  
    45. print('第{}列'.format(x+1)) 
    46.  
    47. successRate=(data.ix[:,x+1]/data.ix[:,x]).fillna(0) 
    48.  
    49. yLeftLabel=data_columns[x] 
    50.  
    51. yRightLable=data_columns[x+1] 
    52.  
    53. print('------------------开始绘制类型{}曲线图------------------'.format(data_columns[x])) 
    54.  
    55. fig=plt.figure(figsize=(25,20)) 
    56.  
    57. ax1=fig.add_subplot(111) 
    58.  
    59. #绘制Total曲线图 
    60.  
    61. ax1.plot(total,color='#4A7EBB',label=yLeftLabel,linewidth=4) 
    62.  
    63. # 设置X轴的坐标刻度线显示间隔 
    64.  
    65. ax1.xaxis.set_major_formatter(mdate.DateFormatter('%Y-%m-%d %H:%M:%S'))#设置时间标签显示格式 
    66.  
    67. plt.xticks(pd.date_range(data.index[0],data.index[-1],freq='1min'))#时间间隔 
    68.  
    69. plt.xticks(rotation=90) 
    70.  
    71. #设置双坐标轴,右侧Y轴 
    72.  
    73. ax2=ax1.twinx() 
    74.  
    75. #设置右侧Y轴显示百分数 
    76.  
    77. fmt='%.2f%%' 
    78.  
    79. yticks = mtick.FormatStrFormatter(fmt) 
    80.  
    81. # 绘制成功率图像 
    82.  
    83. ax2.set_ylim(0,110) 
    84.  
    85. ax2.plot(successRate*100,color='#BE4B48',label=yRightLable,linewidth=4) 
    86.  
    87. ax2.yaxis.set_major_formatter(yticks) 
    88.  
    89. ax1.set_xlabel('Time',fontsize=font_size) 
    90.  
    91. ax1.set_ylabel(yLeftLabel,fontsize=font_size) 
    92.  
    93. ax2.set_ylabel(yRightLable,fontsize=font_size) 
    94.  
    95. legend1=ax1.legend(loc=(.02,.94),fontsize=16,shadow=True
    96.  
    97. legend2=ax2.legend(loc=(.02,.9),fontsize=16,shadow=True
    98.  
    99. legend1.get_frame().set_facecolor('#FFFFFF'
    100.  
    101. legend2.get_frame().set_facecolor('#FFFFFF'
    102.  
    103. plt.title(yLeftLabel+'&'+yRightLable,fontsize=font_size) 
    104.  
    105. plt.savefig('D:\\JGT\\Work-YL\\01布置的任务\\04绘制曲线图和报告文件\\0803\\出图\\{}-{}'.format(yLeftLabel.replace(r'/',' '),yRightLable.replace(r'/',' ')),dpi=300)  
  • Vami-绘图: matplotlib核心剖析
  • Secondary axis with twinx(): how to add to legend?
  • 责任编辑:庞桂玉 segmentfault
    点赞
    收藏