python plot设置坐标轴_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 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对象都是一个拥有自己坐标系统的绘图区域。其逻辑关系如下:

1460000006767257

一个Figure对应一张图片。

Title为标题。Axis为坐标轴,Label为坐标轴标注。Tick为刻度线,Tick Label为刻度注释。1460000006158806

Title为标题。Axis为坐标轴,Label为坐标轴标注。Tick为刻度线,Tick Label为刻度注释。

1460000006158808

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)

1460000006158812

参考

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
©️2021 CSDN 皮肤主题: 1024 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值