繁体   English   中英

Matplotlib:一条线,以不同单位针对两个相关的 x 轴绘制?

[英]Matplotlib: one line, plotted against two related x axes in different units?

我有一个 y 变量,我试图在图形的顶部和底部绘制两个相关的 x 轴(例如 y="立方体中的事物数",x1="立方体的边长",x2="立方体的体积”)。 我在 numpy 数组中有 y、x1、x2。 我的x1和x2之间的关系是一对一单调的,但并不简单,而且它们在不同的方向上增加,比如“边长”和“反体积”。 我试过使用 twiny() 和 twin(),但这些似乎是为绘制不同的 y 变量而设计的。 有任何想法吗? 谢谢大家!

下面是我正在尝试做的事情的一个例子,除了一行而不是符号。 这个想法是,比如说,sigma=0.4 和 M=2e15 是一个点的等效和可互换的标签。

替代文字 http://img580.imageshack.us/img580/4554/screenshotuy.png

对于不同的 x 尺度,使用twiny() (将其视为“共享 y 轴”)。 一个稍微改编自matplotlib 文档的示例:

import numpy as np
import matplotlib.pyplot as plt

# plot f(x)=x for two different x ranges
x1 = np.linspace(0, 1, 50)
x2 = np.linspace(0, 2, 50)
fig = plt.figure()

ax1 = fig.add_subplot(111)
ax1.plot(x1, x1,'b--')

ax2 = ax1.twiny()
ax2.plot(x2, x2, 'go')

plt.show()

如果您只想要第二个轴,则将第二个数据集绘制为不可见。

ax2.plot(x2, x2, alpha=0)

只是为了完整性:存在“辅助轴”( matplotlib docs ):

ax.secondary_xaxis('top', functions=(to_new_axis, from_new_axis))

两个函数

to_new_axis(), from_new_axis()

需要在您当前的单位和不同的单位之间进行适当的缩放。

文档中的代码:

fig, ax = plt.subplots(constrained_layout=True)
x = np.arange(0, 360, 1)
y = np.sin(2 * x * np.pi / 180)
ax.plot(x, y)
ax.set_xlabel('angle [degrees]')
ax.set_ylabel('signal')
ax.set_title('Sine wave')

def deg2rad(x):
    return x * np.pi / 180

def rad2deg(x):
    return x * 180 / np.pi

secax = ax.secondary_xaxis('top', functions=(deg2rad, rad2deg))
secax.set_xlabel('angle [rad]')
plt.show()

在这里,它们以度和弧度为单位显示正弦函数。 如果您没有明确定义的函数来在比例之间切换,您可以使用 numpy 插值:

def forward(x):
    return np.interp(x, xold, xnew)

def inverse(x):
    return np.interp(x, xnew, xold)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM