如何在matplotlib上将多个变量绘制在同一轴上?
如何在matplotlib上将多个变量绘制在同一轴上?
在Matplotlib中如何实现多个刻度尺?我不是指针对相同x轴绘制的主轴和次轴,而是指在同一y轴上绘制具有不同刻度的多个趋势,并且可以通过它们的颜色进行识别。\n例如,如果我有trend1 ([0,1,2,3,4])
和trend2 ([5000,6000,7000,8000,9000])
要绘制在时间轴上,并且希望这两个趋势具有不同的颜色和y轴上不同的刻度,我该如何在Matplotlib中实现这一点?\n当我在研究Matplotlib时,他们说他们目前还没有这个功能,但肯定在他们的愿望清单上,有没有办法绕过这个问题?\n是否有其他可以实现这一功能的Python绘图工具?
问题的出现原因是想在matplotlib上绘制多个变量,但不知道如何在同一轴上绘制。解决方法是使用Pandas的包装函数,只需两行代码即可在辅助Y轴上进行快速绘图。首先绘制第一列,然后绘制第二列时使用参数secondary_y=True
。可以通过Pandas绘图文档了解更多功能。问这个方法是否适用于超过两条线的情况,但没有得到明确答复。
如何在matplotlib上绘制多个变量在同一轴上?
问题的原因:用户想要在matplotlib上绘制多个变量在同一轴上,但不知道如何实现。
解决方法:可以参考Matplotlib图库中的一个示例,链接地址为http://matplotlib.org/examples/axes_grid/demo_parasite_axes2.html。示例中展示了如何在同一轴上绘制多个变量,并附有对应的代码。示例中使用了mpl_toolkits.axes_grid1和mpl_toolkits.axisartist库来实现。
代码如下:
from mpl_toolkits.axes_grid1 import host_subplot import mpl_toolkits.axisartist as AA import matplotlib.pyplot as plt host = host_subplot(111, axes_class=AA.Axes) plt.subplots_adjust(right=0.75) par1 = host.twinx() par2 = host.twinx() offset = 60 new_fixed_axis = par2.get_grid_helper().new_fixed_axis par2.axis["right"] = new_fixed_axis(loc="right", axes=par2, offset=(offset, 0)) par2.axis["right"].toggle(all=True) host.set_xlim(0, 2) host.set_ylim(0, 2) host.set_xlabel("Distance") host.set_ylabel("Density") par1.set_ylabel("Temperature") par2.set_ylabel("Velocity") p1, = host.plot([0, 1, 2], [0, 1, 2], label="Density") p2, = par1.plot([0, 1, 2], [0, 3, 2], label="Temperature") p3, = par2.plot([0, 1, 2], [50, 30, 15], label="Velocity") par1.set_ylim(0, 4) par2.set_ylim(1, 65) host.legend() host.axis["left"].label.set_color(p1.get_color()) par1.axis["right"].label.set_color(p2.get_color()) par2.axis["right"].label.set_color(p3.get_color()) plt.draw() plt.show()
以上就是解决该问题的方法。这段代码可以在matplotlib中绘制多个变量在同一轴上,并且每个变量都有自己的坐标轴。在这个示例中,使用了host_subplot、twinx()和get_grid_helper()等函数来实现这一功能。通过调整参数,还可以自定义图表的各种属性,如坐标轴范围、标签等。
在评论中还有一些用户对这种方法的性能、bug和实现细节提出了一些疑问和问题,但这并不影响该方法的实用性和有效性。
如何在matplotlib上绘制多个变量在同一轴上?
问题的出现原因:
- 有些模块在某些情况下会出现未知的错误。
- 不喜欢加载不熟悉的模块。
- 下面的代码包含更明确的命令,解决了人们经常遇到的问题(例如多个轴的单个图例,使用viridis等),而不是隐式的行为。
解决方法:
import matplotlib.pyplot as plt fig, host = plt.subplots(figsize=(8,5), layout='constrained') ax2 = host.twinx() ax3 = host.twinx() host.set_xlim(0, 2) host.set_ylim(0, 2) ax2.set_ylim(0, 4) ax3.set_ylim(1, 65) host.set_xlabel("Distance") host.set_ylabel("Density") ax2.set_ylabel("Temperature") ax3.set_ylabel("Velocity") color1, color2, color3 = plt.cm.viridis([0, .5, .9]) p1 = host.plot([0, 1, 2], [0, 1, 2], color=color1, label="Density") p2 = ax2.plot( [0, 1, 2], [0, 3, 2], color=color2, label="Temperature") p3 = ax3.plot( [0, 1, 2], [50, 30, 15], color=color3, label="Velocity") host.legend(handles=p1+p2+p3, loc='best') ax3.spines['right'].set_position(('outward', 60)) host.xaxis.set_ticks([]) host.yaxis.label.set_color(p1[0].get_color()) ax2.yaxis.label.set_color(p2[0].get_color()) ax3.yaxis.label.set_color(p3[0].get_color()) plt.savefig("pyplot_multiple_y-axis.pdf", bbox_inches='tight')
这个解决方法使用了`plt.subplots()`函数创建了一个figure和一个subplot,然后通过`twinx()`函数创建了两个新的y轴。设置了各个轴的范围、标签,以及线条的颜色和标签。最后通过`savefig()`函数保存了绘制的图形。
这个解决方法比起其他的解决方案更加简单明了,不需要加载额外的模块,且能够解决人们经常遇到的问题。