在matplotlib中使两个y轴对齐

2024-10-05 15:18:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在绘制一些硬度数据,我想显示两种不同的硬度标度。一种尺度没有限制,而另一种尺度有限制。在维氏硬度标尺中,没有限制,但洛氏C标尺在20以下无效。我怎样才能把秤排成一行?到目前为止,我的计划是绘制维氏数据,然后对其进行过滤,使其不低于20(试验机的报告将其赋值为0)。然后我绘制了罗克韦尔数据,但要隐藏这些点并将其指定给第二个y轴。我没有问题的绘图,但我不能让两个轴'线正确。我可以强迫他们在一个点上排队,但比例缩小了,所以他们开始从我排列他们的地方分崩离析。在

我从另一个问题中发现的代码是:

def align_yaxis(ax1, v1, ax2, v2):
"""adjust ax2 ylimit so that v2 in ax2 is aligned to v1 in ax1"""
_, y1 = ax1.transData.transform((0, v1))
_, y2 = ax2.transData.transform((0, v2))
inv = ax2.transData.inverted()
_, dy = inv.transform((0, 0)) - inv.transform((0, y1-y2))
miny, maxy = ax2.get_ylim()
ax2.set_ylim(miny+dy, maxy+dy)

我还不能上传图片,但这里有一个链接到一个示例图。Plot

我做的是把维克斯392和HRC 40连接起来。但在底部,HRC 20不等于200,它应该等于238。在这个例子中,我打开了HRC标记作为x

编辑:这里是我用来生成绘图的代码,但是有硬编码的数据集。在

^{pr2}$

Tags: 数据绘图绘制transformv2v1尺度inv
2条回答

所以为了解决我的问题,我在适当的y值处使用axhline,并用文本标记它们。所以我基本上只做了我自己的比例尺,没有让matplotlib为我做。在

您只需手动设置限制,然后确保第二个y轴上没有低于20的刻度:

ax1.set_ylim([200, 392])
ax2.set_ylim([20*200/238.,40])
ax2.set_yticks([20, 25, 30, 35, 40])

相关问题 更多 >