当前位置: 首页 > 面试题库 >

Matplotlib:为多个twinx()轴着色

龚钧
2023-03-14
问题内容

我目前在Sage中使用matplotlib绘制一些数据。我可以使用以下示例添加多个y轴:

from mpl_toolkits.axes_grid1 import host_subplot
import mpl_toolkits.axisartist as AA
import matplotlib.pyplot as plt

if 1:

    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()

    #plt.savefig("Test")

来源:http :
//matplotlib.org/examples/axes_grid/demo_parasite_axes2.html

但是,是否可以更改寄生虫轴的颜色?我在某处读到该方法与原始twinx()不太兼容,因此可能会使事情复杂化。


问题答案:

不必使用AA类,尽管通常可以节省几行代码。我不确定您确切要着色什么,因为轴包含许多可以具有颜色的项目,例如刺,标签,壁虱标签等。

这个例子展示了如何给大部分颜色上色,它几乎与画廊中的颜色相同。

import matplotlib.pyplot as plt

fig, host = plt.subplots()
fig.subplots_adjust(right=0.75)

par1 = host.twinx()
par2 = host.twinx()

# move the spine of the second axes outwards
par2.spines["right"].set_position(("axes", 1.2))

p1, = host.plot([0, 1, 2], [0, 1, 2], 'r-', label="Density")
p2, = par1.plot([0, 1, 2], [0, 3, 2], 'g-', label="Temperature")
p3, = par2.plot([0, 1, 2], [50, 30, 15], 'b-', label="Velocity")

host.set_xlim(0, 2)
host.set_ylim(0, 2)
par1.set_ylim(0, 4)
par2.set_ylim(1, 65)

host.set_xlabel("Distance")
host.set_ylabel("Density")
par1.set_ylabel("Temperature")
par2.set_ylabel("Velocity")

lines = [p1, p2, p3]
host.legend(lines, [l.get_label() for l in lines])

for ax in [par1, par2]:
    ax.set_frame_on(True)
    ax.patch.set_visible(False)

    plt.setp(ax.spines.values(), visible=False)
    ax.spines["right"].set_visible(True)

host.yaxis.label.set_color(p1.get_color())
par1.yaxis.label.set_color(p2.get_color())
par2.yaxis.label.set_color(p3.get_color())

par1.spines["right"].set_edgecolor(p2.get_color())
par2.spines["right"].set_edgecolor(p3.get_color())

host.tick_params(axis='y', colors=p1.get_color())
par1.tick_params(axis='y', colors=p2.get_color())
par2.tick_params(axis='y', colors=p3.get_color())


 类似资料:
  • 我想做的是在子地块中创建一个2x2图表。然后,对于每个图形,我将使用两个y轴。因此,我对每个图都使用了twinx()方法。您在我共享的图中看到的问题是,它没有显示第一行的xlabel和xtick。第二排,一切正常。我在图中用红色字体指定了这个问题(“没有xlabel和xticks!!!”)。 每个图都有自己的x轴和y轴,没有共享。 我对这段代码做了很多调整,缩小了问题制造者的范围。这是因为我在上面

  • 在一些应用场景中,有时需要绘制两个 x 轴或两个 y 轴,这样可以更直观地显现图像,从而获取更有效的数据。Matplotlib 提供的 twinx() 和 twiny() 函数,除了可以实现绘制双轴的功能外,还可以使用不同的单位来绘制曲线,比如一个轴绘制对函数,另外一个轴绘制指数函数。 下面示例绘制了一个具有两个 y 轴的图形,一个显示指数函数 exp(x),另一个显示对数函数 log(x)。 输

  • 本文向大家介绍matplotlib 创建轴,包括了matplotlib 创建轴的使用技巧和注意事项,需要的朋友参考一下 示例 在matplotlib中创建轴的主要方法有两种:使用pyplot或使用面向对象的API。 使用pyplot: 使用面向对象的API: 便捷功能可用于在一个命令中生成图形和子图集合:plt.subplots()            

  • 问题内容: 我有一个使用两个y轴的图。我还给行加了标签,并想用显示,但我仅成功获得了图例中一个轴的标签: 因此,我只得到图例中第一个轴的标签,而不是第二个轴的标签“ temp”。如何将第三个标签添加到图例? 问题答案: 你可以通过添加以下行轻松添加第二个图例: 你将获得: 但是,如果要将所有标签都放在一个图例上,则应执行以下操作:

  • 问题内容: 基本上我在一个图中有两个3d轴,一个通过matplotlib.aninmation构建的动画和一个并排的3d线图。我想添加功能,以便当您旋转一个轴时,另一个跟随它的旋转。例如,将当前视角发送到另一个轴的功能,例如; 等用于比较粒子的动画路径与其预先绘制的轨迹。 问题答案: 为了使mplot3d中两个子图之间的旋转同步,您可以将其连接到一个函数,该函数从旋转的图读取角度并将其应用于其他各

  • 问题内容: 如何在matplotlib中绘制多个条形图,当我尝试多次调用bar函数时,它们重叠了,如下图所示,只能看到最大值红色。如何在X轴上绘制带有日期的多个条形图? 到目前为止,我已经尝试过了: 问题答案: import matplotlib.pyplot as plt from matplotlib.dates import date2num import datetime 我不知道“ y值

  • 问题内容: 如何控制pyplot图的轴设置。我干完了 我得到的就是我想要的 但我希望x轴位于0而不是底部。我该怎么做? 问题答案:

  • 问题内容: 我正在matplotlib中生成图形,我想将x轴设置在0-10000之间,但我不想更改y轴,我希望图形自己完成。现在,两个轴都会自动生成。 这是一个例子: axis命令无法帮助我,因为我也必须设置y值。同样由于某种原因,xlim不起作用,它表示没有参数xlim。 任何建议表示赞赏,谢谢 问题答案: 这对我来说似乎很好: