【问题标题】:How can I draw transparent lines where the color becomes stronger when they overlap?如何绘制重叠时颜色变强的透明线?
【发布时间】:2017-01-23 01:53:57
【问题描述】:

当你像这样在 matplotlib 中绘制一堆透明线时,你会得到一个很好的效果;当它们重叠时,它们会变暗一些。

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

看起来像这样:

但是,如果您像这样画一条与自身重叠的长线,则该线不会“与自身交互”。它看起来像这样:

我想画一条与自身重叠的单曲线,这样与自身重叠的越多,它就会变得越暗。如果我使用循环来分解曲线并分别绘制每个线段,我会得到我想要的,但我也会在线段相交处得到难看和不可接受的伪影,使曲线看起来像虚线或虚线......就像这个:

有没有什么好的方法来绘制一条曲线,使它在与自身重叠时变得更暗,但是你不会得到像刚才描述的那样的伪影?

【问题讨论】:

  • 您究竟是如何制作第三张图片的,它展示了这些人工制品?

标签: python matplotlib alpha


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-31
    相关资源
    最近更新 更多