如何在重叠时颜色变得更强的地方绘制透明线条?

时间:2017-01-23 01:53:58

标签: python matplotlib alpha

当你在matplotlib中绘制一堆透明线条时,你会得到很好的效果;当它们重叠时,它们会更暗。

from pylab import *
for _ in xrange(1000) :
    plot(np.random.randn(2),np.random.randn(2),alpha=0.1,color='k')
show()

看起来像这样:

many lines overlapping

但是如果你像这样绘制一条与它自身重叠的长线,那么该线就不会“与自身相互作用”。它看起来像这样:

one line overlapping itself many times

我想绘制一条与自身重叠的曲线,这样它与自身重叠的越多,它就越暗。如果我使用一个循环来分解曲线并分别绘制每个线段,我得到了我想要的东西,但是我也得到了线段相遇的丑陋和不可接受的伪像,使得曲线看起来像点线或虚线。这样:

best effort so far

有没有很好的方法来绘制曲线,使其在与自身重叠时变得更暗,但是你没有得到像刚才描述的那样的神器?

1 个答案:

答案 0 :(得分:4)

使用循环分解曲线并分别绘制每个线段时,可以尝试使用solid_capstyle参数plot。默认值为"projecting",但您可以尝试使用"butt"并查看是否有帮助。

plt.plot(x,y, alpha=0.1, c="k", solid_capstyle="butt")

这可能会减少一点效果。

import matplotlib.pyplot as plt
import numpy as np

def squiggle_xy(a, b, c, d, i=np.arange(0.0, 2*np.pi, 0.05)):
    return np.sin(i*a)*np.cos(i*b), np.sin(i*c)*np.cos(i*d)

x,y = squiggle_xy(2.5, 2, 1, 3)

fig, ax = plt.subplots(ncols=2, figsize=(6,3))
ax[0].set_title("solid_capstyle=\"projecting\"")
ax[1].set_title("solid_capstyle=\"butt\"")
for i in range(len(x)-1):
    print x[i:i+2]
    ax[0].plot(x[i:i+2], y[i:i+2], alpha=0.1, lw=10, solid_capstyle="projecting", c="b")
    ax[1].plot(x[i:i+2], y[i:i+2], alpha=0.1, lw=10, solid_capstyle="butt", c="b")

plt.show()

enter image description here

有关solid_capstyle的详细解释,请参阅this question