如何绘制重叠时颜色变深的透明线?
How can I draw transparent lines where the color becomes stronger when they overlap?
像这样在matplotlib中画一堆透明线,效果不错;当它们重叠时,它们会更暗一些。
from pylab import *
for _ in xrange(1000) :
plot(np.random.randn(2),np.random.randn(2),alpha=0.1,color='k')
show()
看起来像这样:
但是如果你像这样画一条长线并像这样与自己重叠,这条线就不会"interact with itself."它看起来像这样:
我想画一条与自身重叠的单条曲线,这样与自己重叠的越多,它就越暗。如果我使用一个循环来分解曲线并分别绘制每条线段,我会得到我想要的,但我也会在线段相交的地方得到丑陋和不可接受的伪影,使曲线看起来像一条点线或虚线。就像这个:
有没有什么好的方法可以绘制一条曲线,使其在与自身重叠时变得更暗,但不会出现刚才描述的伪影?
使用循环打散曲线,分别绘制每条线段时,可以尝试使用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()
请参阅 this question 了解 solid_capstyle
的详细解释。
像这样在matplotlib中画一堆透明线,效果不错;当它们重叠时,它们会更暗一些。
from pylab import *
for _ in xrange(1000) :
plot(np.random.randn(2),np.random.randn(2),alpha=0.1,color='k')
show()
看起来像这样:
但是如果你像这样画一条长线并像这样与自己重叠,这条线就不会"interact with itself."它看起来像这样:
我想画一条与自身重叠的单条曲线,这样与自己重叠的越多,它就越暗。如果我使用一个循环来分解曲线并分别绘制每条线段,我会得到我想要的,但我也会在线段相交的地方得到丑陋和不可接受的伪影,使曲线看起来像一条点线或虚线。就像这个:
有没有什么好的方法可以绘制一条曲线,使其在与自身重叠时变得更暗,但不会出现刚才描述的伪影?
使用循环打散曲线,分别绘制每条线段时,可以尝试使用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()
请参阅 this question 了解 solid_capstyle
的详细解释。