繁体   English   中英

我该如何要求matplotlib稍微移动重叠曲线,以免它们彼此隐藏?

[英]How can I ask matplotlib to slightly shift overlapping curves so they don't hide one another?

我正在使用matplotlib.pyplot在同一张图上绘制几条曲线。 有时它们具有相等的值,因此最后一个隐藏其他值,如下所示:

import matplotlib.pyplot as plt
plt.figure()
plt.plot([1,2,3,4], label="up")
plt.plot([1,2,3,2.5], label="down")
plt.show()

隐藏曲线

我希望曲线稍微偏移,这样它们就不会彼此隐藏,就像这样:

所有曲线可见

有什么适当的方法可以执行此操作,而不更改我正在绘制的实际值?

更新:到目前为止(就我而言)最好的答案是TheImportanceOfBeingErnest 但是,如果要绘制n条曲线,而不仅仅是2条曲线,则必须计算每个曲线的累积偏移量。 但是考虑到该答案涉及的复杂计算,我想matplotlib无法自动执行此操作吗?

PS:由于我的值都是0.5的倍数,(轻微)移动不会冒出混淆实际值的风险...

我想翻译大小为matplotlib.transforms.offset_copy的艺术家的通常方法是使用matplotlib.transforms.offset_copy 由于默认的线宽为1.5点,因此可以将曲线平移大约那个数。

import matplotlib.pyplot as plt
import matplotlib.transforms as mtrans

fig, ax = plt.subplots()
ax.plot([1,2,3,4], label="up")

tr = mtrans.offset_copy(ax.transData, fig=fig, x=0.0, y=-1.5, units='points')
ax.plot([1,2,3,2.5], label="down", transform=tr)

plt.show()

在此处输入图片说明

注意,这在行扩展且没有很多起伏的情况下效果很好。 在matplotlib中找到了更复杂的解决方案(但在很大程度上也更复杂) ,我如何绘制多色线,例如彩虹

您可以使用alpha属性。

import matplotlib.pyplot as plt
plt.figure()
plt.plot([1,2,3,4], label="up")
plt.plot([1,2,3,2.5], label="down", alpha=.3)
plt.legend()
plt.show()

更改[0,1]之间的比率,以获得所需的最佳方式。 通过这种方式,您不必更改值。

为了提高可见性,您可以添加带有“ alpha”的“ linewidth”属性。 例如

import matplotlib.pyplot as plt
plt.figure()
plt.plot([1,2,3,4], label="up")
plt.plot([1,2,3,2.5], label="down", linewidth=4, alpha=.5)
plt.legend()
plt.show()

根据需要更改值。

我将使用一种transform ,将第二个绘图中的点稍微向下移动(也可以将其应用于第一个绘图中以将点向上移动):

import matplotlib.pyplot as plt
from matplotlib import transforms

fig, ax = plt.subplots()

transform = transforms.Affine2D().translate(0, -0.03) + ax.transData

ax.plot([1, 2, 3, 4], label="up")
ax.plot([1, 2, 3, 2.5], label="down", transform=transform)

在此处输入图片说明

您可以简单地缩放值

import matplotlib.pyplot as plt
plt.figure()
plt.plot([1,2,3,4], label="up")
plt.plot([x-0.02 for x in [1,2,3,2.5]], label="down")
plt.legend()
plt.show()

产量

另一种选择是使用虚线,使其具有重叠的较暗颜色。

import matplotlib.pyplot as plt
plt.figure()
plt.plot([1,2,3,4], color="red", label="up", lw=2)
plt.plot([1,2,3,2.5], color="black", linestyle=":", label="down", lw=2)

在此处输入图片说明

暂无
暂无

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

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