Matplotlib:当曲线重叠时如何防止透明颜色叠加?

4
例如,在这里我们绘制一条透明的线。
import numpy as np
import matplotlib.pyplot as plt

a = np.array([1, 2, 3, 4, 5])
b = 2*a
plt.plot(a, b, 'blue', alpha=0.3)
plt.show()

这里输入图片描述

但是,当我多次绘制同一条线时,它会与自身重叠,导致越来越暗。

import numpy as np
import matplotlib.pyplot as plt


a = np.array([1, 2, 3, 4, 5])
b = 2*a
for i in range(3):
    plt.plot(a, b, 'blue', alpha=0.3)
plt.show()

输入图像描述

那么我该如何避免颜色重叠呢?

先感谢大家!

更新:为什么我需要这个?

我正在进行公差分析。也就是说,参数在一个很小的范围内自行变化,我将为每个变化绘制曲线。然后我可以找到最坏情况。

输入图像描述

如果我选择一种纯色但较浅的颜色,它看起来会像这样:

输入图像描述

正如您所看到的,使用不透明的颜色,我无法观察到被其他线条覆盖的节点。

更新2:

输入图像描述


1
这正是透明线条应该做的事情...如果你不喜欢,选择一种固体但较浅的颜色。 - Nils Werner
我完全同意@NilsWerner的观点。我甚至认为他的评论是正确的答案。我的意思是,为什么有人会考虑这是不可取的呢? - heltonbiker
@heltonbiker 我已经更新了,为什么我需要它。 - sun0727
@NilsWerner 我已经更新了,为什么我需要它。 - sun0727
1个回答

2
一条线不会重叠。因此,您可以将多个图形连接成一个单独的图形。
import numpy as np
import matplotlib.pyplot as plt


a = np.array([1, 2, 3, 4, 5])
b = 2*a

A = np.tile(np.append(a,[np.nan]),3)
B = np.tile(np.append(b,[np.nan]),3)

plt.plot(A, B, 'blue', alpha=0.3)
plt.show()

enter image description here

这基本上是与这个问题相反的问题如何绘制透明线条,使它们重叠时颜色变得更强?,在那个问题中,这种效果是不期望的。

我更新了答案。然而,鉴于问题已经更新,我有些难以理解这个问题。你似乎在每行使用两条线,一条宽透明的线和一条窄的不透明的线。为什么不把透明的线放在背景中呢? - ImportanceOfBeingErnest
1
非常感谢你提供的好解决方案。那条宽透明的线不是单一的线,而是一个区域,其中包含许多透明线。那条窄的不透明线是理想值的曲线,而透明曲线表示具有误差的参数。 - sun0727
该区域由许多曲线组成。如何简单地绘制该区域?我的英语不好,请查看更新后的图形。 - sun0727
2
啊,好的,现在我明白问题了。那么,在这种情况下,这里提出的答案确实可能是更好的选择。 - ImportanceOfBeingErnest
1
如果所有曲线的所有数据都具有相同的x坐标,则可以将它们连接起来,沿着连接维度找到最小值和最大值,并使用fill_between绘制区域。 - ImportanceOfBeingErnest
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接