from mpl_toolkits.axisartist.parasite_axes import HostAxes, ParasiteAxes
import matplotlib.pyplot as plt
import numpy as np
# 图层可分为四种
#
# Canvas层 画布层 位于最底层,用户一般接触不到。 matplotlib.pyplot就是一个canvas层
# Figure层 图像层 建立在Canvas之上。 plt.figure()就是一个figure层
# Axes层 坐标层 建立在Figure之上。fig.add_axes(ax)就加一个Axes层ax在figure上,这时就可以画出一个空白的坐标了。
# plot层 绘制层 坐标轴、图例等辅助信息层以及图像层都是建立在Axes之上
#定义一个画图,确定画图区域(画线区域不包括坐标轴和标题部分)
def pltmlty(data1x,data1y,data2x,data2y,data3x,data3y,data4x,data4y,data5x,data5y):
fig = plt.figure() #定义figure,(1)中的1是什么
ax_cof = HostAxes(fig, [0.1, 0.1, 0.8, 0.8]) #用[left, bottom, weight, height]的方式定义axes,0 <= l,b,w,h <= 1
#定义几个坐标轴
#parasite addtional axes, share x
ax_temp = ParasiteAxes(ax_cof, sharex=ax_cof)
ax_load = ParasiteAxes(ax_cof, sharex=ax_cof)
ax_cp = ParasiteAxes(ax_cof, sharex=ax_cof)
ax_wear = ParasiteAxes(ax_cof, sharex=ax_cof)
#把定义的坐标轴周添加到图中
#append axes
ax_cof.parasites.append(ax_temp)
ax_cof.parasites.append(ax_load)
ax_cof.parasites.append(ax_cp)
ax_cof.parasites.append(ax_wear)
#设置主坐标系的上右轴不显示,主轴的y坐标系在左边
#invisible right axis of ax_cof
ax_cof.axis['right'].set_visible(False)
ax_cof.axis['top'].set_visible(False)
ax_temp.axis['right'].set_visible(True)
ax_temp.axis['right'].major_ticklabels.set_visible(True)#刻度
ax_temp.axis['right'].label.set_visible(True)#标题
#set label for axis
ax_cof.set_ylabel('cof')
ax_cof.set_xlabel('Distance (m)')
ax_temp.set_ylabel('Temperature')
ax_load.set_ylabel('load')
ax_cp.set_ylabel('CP')
ax_wear.set_ylabel('Wear')
#设置多个y轴的位置,其中的字典自己定义
load_axisline = ax_load.get_grid_helper().new_fixed_axis
cp_axisline = ax_cp.get_grid_helper().new_fixed_axis
wear_axisline = ax_wear.get_grid_helper().new_fixed_axis
ax_load.axis['rightpp'] = load_axisline(loc='right', axes=ax_load, offset=(40,0))
ax_cp.axis['right3'] = cp_axisline(loc='right', axes=ax_cp, offset=(80,0))
ax_wear.axis['right4'] = wear_axisline(loc='right', axes=ax_wear, offset=(120,0))
#主图添加到图布
fig.add_axes(ax_cof)
''' #set limit of x, y
ax_cof.set_xlim(0,2)
ax_cof.set_ylim(0,3)
'''
#画图
curve_cof, = ax_cof.plot(data1x, data1y, label="CoF", color='black')
curve_temp, = ax_temp.plot(data2x, data2y, label="Temp", color='red')
curve_load, = ax_load.plot(data3x, data3y, label="Load", color='green')
curve_cp, = ax_cp.plot(data4x, data4y, label="CP", color='pink')
curve_wear, = ax_wear.plot(data5x, data5y, label="Wear", color='blue')
#设置坐标系范围
# ax_temp.set_ylim(0,4)
# ax_load.set_ylim(0,4)
# ax_cp.set_ylim(0,50)
# ax_wear.set_ylim(0,30)
#显示所有legend
ax_cof.legend()
#轴名称,刻度值的颜色
#ax_cof.axis['left'].label.set_color(ax_cof.get_color())
ax_temp.axis['right'].label.set_color('red')
ax_load.axis['rightpp'].label.set_color('green')
ax_cp.axis['right3'].label.set_color('pink')
ax_wear.axis['right4'].label.set_color('blue')
#刻度颜色
ax_temp.axis['right'].major_ticks.set_color('red')
ax_load.axis['rightpp'].major_ticks.set_color('green')
ax_cp.axis['right3'].major_ticks.set_color('pink')
ax_wear.axis['right4'].major_ticks.set_color('blue')
#刻度标签颜色
ax_temp.axis['right'].major_ticklabels.set_color('red')
ax_load.axis['rightpp'].major_ticklabels.set_color('green')
ax_cp.axis['right3'].major_ticklabels.set_color('pink')
ax_wear.axis['right4'].major_ticklabels.set_color('blue')
#y轴线颜色
ax_temp.axis['right'].line.set_color('red')
ax_load.axis['rightpp'].line.set_color('green')
ax_cp.axis['right3'].line.set_color('pink')
ax_wear.axis['right4'].line.set_color('blue')
import matplotlib.pyplot as plt
import matplotlib.ticker as mtick #科学计数法使用
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
import numpy as np
import math
#plt.figure(figsize = (8, 3))
#wspace和hspace表示子图之间的水平和垂直间距
#left、right、bottom、top分别表示绘图区域的左、右、下、上边界的位置,按照百分比,1表示100%
plt.subplots_adjust(left=0.25, right=0.7, bottom=0.1, top=0.9, wspace=0.1, hspace=0.2)
x=np.linspace(0,10,1000)
ax2=plt.gca()
y=[math.sin(i+1) for i in x]
ax2.plot(x,y,"k-",label="ok")#画图
#ax2.spines['left'].set_position(('axes',-0.15))#设置左轴在x范围-10%的地方
#ax2.spines['left'].set_color("g")#设置左轴的颜色
ax2.yaxis.set_ticks_position("left")#设置刻度在左侧轴上
ax2.yaxis.set_label_text("第1轴",color='k')#设置标题
ax2.yaxis.set_label_position("left")#设置label左侧轴上
ax2.tick_params(axis='y',colors='k')#设置y轴刻度颜色
#ax2.ticklabel_format(style='sci', scilimits=(0,0), axis='y')#设置y轴科学计数法
#ax2.yaxis.set_major_formatter(mtick.FormatStrFormatter('%.1e'))#保留1位小数
plt.twinx()
ax2=plt.gca()
y=[math.sin(i+1) for i in x]
ax2.plot(x,y,"g-",label="ok")#画图
ax2.spines['left'].set_position(('axes',-0.15))#设置左轴在x范围-10%的地方
ax2.spines['left'].set_color("g")#设置左轴的颜色
ax2.yaxis.set_ticks_position("left")#设置刻度在左侧轴上
ax2.yaxis.set_label_text("第2轴",color='g')#设置标题
ax2.yaxis.set_label_position("left")#设置label左侧轴上
ax2.tick_params(axis='y',colors='g')#设置y轴刻度颜色
#ax2.ticklabel_format(style='sci', scilimits=(0,0), axis='y')#设置y轴科学计数法
#ax2.yaxis.set_major_formatter(mtick.FormatStrFormatter('%.1e'))#保留1位小数
plt.twinx()
ax2=plt.gca()
y=[math.sin(i-1) for i in x]
ax2.plot(x,y,"m-",label="ok")#画图
ax2.spines['left'].set_position(('axes',-0.3))#设置左轴在x范围-10%的地方
ax2.spines['left'].set_color("m")#设置左轴的颜色
ax2.yaxis.set_ticks_position("left")#设置刻度在左侧轴上
ax2.yaxis.set_label_text("第3条y轴",color='m')#设置标题
ax2.yaxis.set_label_position("left")#设置label左侧轴上
ax2.tick_params(axis='y',colors='m')#设置y轴刻度颜色
#ax2.ticklabel_format(style='sci', scilimits=(0,0), axis='y')#设置y轴科学计数法
#ax2.yaxis.set_major_formatter(mtick.FormatStrFormatter('%.1e'))#保留1位小数
plt.twinx()
ax2=plt.gca()
y=[math.sin(i+2)+2 for i in x]
ax2.plot(x,y,"r-",label="ok")#画图
ax2.spines['left'].set_position(('axes',1))#设置左轴在x范围-10%的地方
#ax2.spines['right'].set_position(('axes',1.1))#设置左轴在x范围-10%的地方
ax2.spines['right'].set_color("r")#设置右侧轴的颜色
ax2.yaxis.set_label_text("第4条y轴",color='r')#设置标题
ax2.yaxis.set_label_position("right")#设置label右侧轴上
ax2.tick_params(axis='y',colors='r')#设置y轴刻度颜色
ax2.yaxis.set_ticks_position("right")#设置刻度在右侧轴上
#ax2.yaxis.tick_right()
#ax2.ticklabel_format(style='sci', scilimits=(0,0), axis='y')#设置y轴科学计数法
#ax2.yaxis.set_major_formatter(mtick.FormatStrFormatter('%.1e'))#保留1位小数
plt.twinx()
ax3=plt.gca()
y=[math.sin(i+3) for i in x]
ax3.plot(x,y,"b-",label="ok")#画图
ax3.spines['right'].set_position(('axes',1.25))#设置左轴在x范围-10%的地方
ax3.spines['left'].set_position(('axes',1.25))#设置左轴在x范围-10%的地方
ax3.spines['right'].set_color("b")#设置左轴的颜色
ax3.yaxis.set_ticks_position("right")#设置刻度在左侧轴上
ax3.yaxis.set_label_text("第5条y轴",color='b')#设置标题
ax3.yaxis.tick_right()
ax3.yaxis.set_label_position("right")#设置label左侧轴上
ax3.tick_params(axis='y',colors='b')#设置y轴刻度颜色
#ax2.ticklabel_format(style='sci', scilimits=(0,0), axis='y')#设置y轴科学计数法
#ax2.yaxis.set_major_formatter(mtick.FormatStrFormatter('%.1e'))#保留1位小数
"""只有最后一个Y轴刻度能在右轴显示,其他要是前面的只能在左轴显示"""
plt.twinx()
ax3=plt.gca()
y=[math.sin(i+5) for i in x]
ax3.plot(x,y,"y-",label="ok")#画图
#ax3.spines['left'].set_position(('axes',1.35))#设置左轴在x范围-10%的地方
ax3.spines['right'].set_position(('axes',1.35))#设置左轴在x范围-10%的地方
ax3.spines['right'].set_color("y")#设置左轴的颜色
ax3.yaxis.set_ticks_position("right")#设置刻度在左侧轴上
ax3.yaxis.set_label_text("第6条y轴",color='y')#设置标题
ax3.yaxis.set_label_position("right")#设置label左侧轴上
ax3.tick_params(axis='y',colors='y')#设置y轴刻度颜色
#ax2.ticklabel_format(style='sci', scilimits=(0,0), axis='y')#设置y轴科学计数法
#ax2.yaxis.set_major_formatter(mtick.FormatStrFormatter('%.1e'))#保留1位小数
plt.show()
Python-Matplotlib折线图绘制----y轴刻度不同 <lpliner>-python黑洞网