如何在matplotlib上将多个变量绘制在同一轴上?

20 浏览
0 Comments

如何在matplotlib上将多个变量绘制在同一轴上?

在Matplotlib中如何实现多个刻度尺?我不是指针对相同x轴绘制的主轴和次轴,而是指在同一y轴上绘制具有不同刻度的多个趋势,并且可以通过它们的颜色进行识别。\n例如,如果我有trend1 ([0,1,2,3,4])trend2 ([5000,6000,7000,8000,9000])要绘制在时间轴上,并且希望这两个趋势具有不同的颜色和y轴上不同的刻度,我该如何在Matplotlib中实现这一点?\n当我在研究Matplotlib时,他们说他们目前还没有这个功能,但肯定在他们的愿望清单上,有没有办法绕过这个问题?\n是否有其他可以实现这一功能的Python绘图工具?

0
0 Comments

问题的出现原因是想在matplotlib上绘制多个变量,但不知道如何在同一轴上绘制。解决方法是使用Pandas的包装函数,只需两行代码即可在辅助Y轴上进行快速绘图。首先绘制第一列,然后绘制第二列时使用参数secondary_y=True。可以通过Pandas绘图文档了解更多功能。问这个方法是否适用于超过两条线的情况,但没有得到明确答复。

0
0 Comments

如何在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和实现细节提出了一些疑问和问题,但这并不影响该方法的实用性和有效性。

0
0 Comments

如何在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()`函数保存了绘制的图形。

这个解决方法比起其他的解决方案更加简单明了,不需要加载额外的模块,且能够解决人们经常遇到的问题。

0