python画双y轴折线图,python 双y轴
本文主要介绍如何使用图形。Add _ Subplot和axes.twinx()。twiny()方法实现双X轴和双Y轴绘图。文章中的示例代码有详细的解释。请用边肖试试。
尸体造假人口回归。今年忙着倒水,结果丢了。最近在女朋友的提醒下终于想起了自己的博客账号密码。碰巧今天倒水的时候需要画一个双X轴双Y轴图。经过两个小时的研究,我终于用Py实现了。我在找资料的过程中没有找到系统的文章。反正代码整理出来了,我决定好好利用一下。
目前,plt中实现双X轴和双Y轴绘图有两种方式:
通过fig.add_subplot将两对坐标系叠加在一个图形上,实现双X轴双Y轴效果。所有的调整都可以完美实现,推荐这种方式。
Axes.twinx()。twiny()用于绘制双X轴和双Y轴图形。问题是第二个Y轴的设置无效。可以通过手动添加来创建和指定标签,但不能修改刻度颜色。可能需要等待官方修复,或者尝试使用ax1=axes.twinx()从ax1获取第二个Y轴,然后使用ax2.twiny()创建第二个X轴。
fig.add_subplot 方式实现双X轴双Y轴绘图
使用plt,通过fig.add_subplot将两对坐标系叠加在一个图形上,实现双X轴双Y轴效果。
所有的调整都可以完美实现,推荐这种方式。
将matplotlib.pyplot作为plt导入
将numpy作为np导入
生成数据并设置绘图参数
x=np.arange(1,12,4)
y=np.arange(1,4,1)
x2=x*10
y2=y**2
#设置两种绘图颜色
c1=r
c2=b
#设置字体大小
fontsize=12
#设置画布大小
宽度,高度=16,14 #厘米;因为保存图片时使用bbox_inches=tight 可能会稍微放大图片的尺寸,所以这里的宽度设置得稍微小一点。
#设置坐标轴上的刻度线
PLT . RC params[ x tick . direction ]= in
PLT . RC params[ y tick . direction ]= in
绘图
Lns=[] #用于存储合并图例的绘图句柄的列表
#创建一个画布并设置其大小
图=plt.figure()
figure . set _ size _ inches(width/2.54,height/2.54) #因为画布输入尺寸是cm,这里需要换算成英寸,所以除以2.54。
#通过添加_ subplot创建两个坐标轴,相当于在同一个子图上叠加两对坐标系。
ax=fig.add_subplot(111,label=1 )
ax2=fig.add_subplot(111,label=2 ,frame_on=False)
#绘制图1并返回绘图句柄以添加合并的图例。
lns1=ax.plot(x,y,color=c1,label=c1)
lns=lns1
lns2=ax2.plot(x2,y2,color=c2,label=c2)
lns=lns2
图形美化
#调整第二对坐标轴的标签和刻度位置,以实现双X轴和双Y轴效果。
ax2.xaxis.tick_top()
ax2.yaxis.tick_right()
ax2 . xaxis . set _ label _ position( top )
ax2.yaxis.set_label_position(右)
#设置坐标轴注释
ax.set_xlabel(X1 ,color=c1,fontsize=fontsize)
ax.set_ylabel(Y1 ,color=c1,fontsize=fontsize)
ax2.set_xlabel(X2 ,color=c2,fontsize=fontsize)
ax2.set_ylabel(Y2 ,color=c2,fontsize=fontsize)
#设置图表标题
fig.suptitle(Title ,fontsize=fontsize 2)
#设置坐标轴刻度颜色
ax.tick_params(axis=x ,colors=c1)
ax.tick_params(axis=y ,colors=c1)
ax2.tick_params(axis=x ,colors=c2)
ax2.tick_params(axis=y ,colors=c2)
#设置坐标轴颜色
Ax.spines [左]。set _ color (r) #修改左边的颜色
Ax.spines [右]。set _ color (b) #修改正确的颜色
ax.spines[top]。设置颜色( b
) # 修改上边颜色
ax.spines["bottom"].set_color("r") # 修改下边颜色
# 添加图例
labs = [l.get_label() for l in lns]
ax.legend(lns, labs, loc=0,fontsize=fontsize)
plt.tight_layout()
plt.show()
使用 axes.twinx().twiny() 方式实现双X轴双Y轴绘图
"""使用plt,通过 axes.twinx().twiny() 方式实现双X轴双Y轴图形绘制。
问题在于对于第二个Y轴的各种设置无效,label可以通过手动添加的方式创建并指定颜色,而tick颜色则无法修改
"""
import matplotlib.pyplot as plt
import numpy as np
"""生成数据并设置绘图参数"""
x = np.arange(1, 12, 4)
y = np.arange(1, 4, 1)
x2=x*10
y2=y**2
# 设置两种绘图颜色
c1=r
c2=b
# 设置字体大小
fontsize=12
# 设置刻度线在坐标轴内
plt.rcParams[xtick.direction] = in
plt.rcParams[ytick.direction] = in
"""绘图"""
lns=[] # 用于存储绘图句柄以合并图例的list
# 创建画布
fig,axes=plt.subplots()
fig.set_size_inches(10, 8)
# 绘制图1并将绘图句柄返回,以便添加合并图例
lns1=axes.plot(x,y,color=c1,label=c1)
lns=lns1
# 创建双x轴双y轴
twin_axes=axes.twinx().twiny() # 使用画布的初始坐标轴对象创建第二对坐标轴,类似于在双x轴的基础上叠加双y轴
# 绘制图2并将绘图句柄返回,以便添加合并图例
lns2=twin_axes.plot(x2,y2,color=c2,label=c2)
lns+=lns2
"""图形美化"""
# 设置坐标轴标注
axes.set_xlabel("X1",color=c1, fontsize=fontsize)
axes.set_ylabel("Y1",color=c1, fontsize=fontsize)
twin_axes.set_xlabel("X2",color=c2, fontsize=fontsize)
twin_axes.set_ylabel("Y2",color=c2, fontsize=fontsize) # 第二个y轴设置标注无效
# 设置图表标题
fig.suptitle("Title",fontsize=fontsize+2)
# 设置第二个y轴的label;由于set_ylabel无效,因此只能通过该种方式手动添加
loc_text_x=np.min(plt.xlim())+np.ptp(plt.xlim())*1.03
loc_text_y=np.min(plt.ylim())+np.ptp(plt.ylim())*0.5
str_text=Y2
twin_axes.text(loc_text_x, loc_text_y, str_text,rotation=90,color=c2,fontsize=fontsize)
# 设置坐标轴刻度颜色
axes.tick_params(x, colors=c1)
axes.tick_params(y, colors=c1)
twin_axes.tick_params(x, colors=c2)
twin_axes.tick_params(y, colors=c2)
# 设置坐标轴线颜色
twin_axes.spines["left"].set_color("r") # 修改左侧颜色
twin_axes.spines["right"].set_color("b") # 修改右侧颜色;同第二个y轴的label设置一样,该设置也不起作用
twin_axes.spines["top"].set_color("b") # 修改上边颜色
twin_axes.spines["bottom"].set_color("r") # 修改下边颜色
# 添加图例
# lns = lns1+lns2
labs = [l.get_label() for l in lns]
axes.legend(lns, labs, loc=0,fontsize=fontsize)
plt.tight_layout()
plt.show()
到此这篇关于Python实现双X轴双Y轴绘图的示例详解的文章就介绍到这了,更多相关Python双轴绘图内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。