2017-01-23 73 views
5

当你像这样在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

有没有划出一道弧线,使其变得更暗,当它与本身重叠任何很好的方式,但你没有得到像那些文物只是描述?

+0

您具体是如何产生的第三图像,这说明这些文物? – ImportanceOfBeingErnest

回答

3

当使用循环分解曲线并分别绘制每个线段时,可以尝试使用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

+0

这对于细线很适用。谢谢! – weemattisnot

相关问题