<h2>简介</h2>
<p>我要用<a href="https://matplotlib.org/api/collections_api.html#matplotlib.collections.LineCollection" rel="nofollow noreferrer">line collection</a>。你知道吗</p>
<p><a href="https://i.stack.imgur.com/NsYJ5.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/NsYJ5.png" alt="enter image description here"/></a>
因为我没有你的原始数据,我伪造了一些数据,使用一个简单的正弦曲线和绘制在基线上的颜色代码对应的小,中,高值的曲线</p>
<h2>代码</h2>
<p>通常,我们需要显式导入<code>LineCollection</code></p>
<pre><code>import matplotlib.pyplot as plt
import numpy as np
from matplotlib.collections import LineCollection
</code></pre>
<p>只是画一些东西,正弦曲线(xr
</p><pre><code>x = np.linspace(0, 50, 101)
y = np.sin(0.3*x)
</code></pre>
<p>从曲线值(对应于曲面类型)到<code>LineCollection</code>颜色的颜色编码,请注意<code>LineCollection</code><em>要求将颜色指定为RGBA元组,但是我看到了使用颜色字符串的示例,呸!你知道吗</p>
<pre><code># 1 when near min, 2 when near 0, 3 when near max
z = np.where(y<-0.5, 1, np.where(y<+0.5, 2, 3))
col_d = {1:(0.4, 0.4, 1.0, 1), # blue, near min
2:(0.4, 1.0, 0.4, 1), # green, near zero
3:(1.0, 0.4, 0.4, 1)} # red, near max
# prepare the list of colors
colors = [col_d[n] for n in z]
</code></pre>
<p>在一个行集合中,我们需要一个段序列,这里我决定把我的编码行放在<code>y=0</code>,但你只需给<code>s</code>加一个常量,就可以上下移动它。<br/>
我承认形成片段序列有点棘手。。。你知道吗</p>
<pre><code># build the sequence of segments
s = np.zeros(101)
segments=np.array(list(zip(zip(x,x[1:]),zip(s,s[1:])))).transpose((0,2,1))
# and fill the LineCollection
lc = LineCollection(segments, colors=colors, linewidths=5,
antialiaseds=0, # to prevent artifacts between lines
zorder=3 # to force drawing over the curve) lc = LineCollection(segments, colors=colors, linewidths=5) # possibly add zorder=...
</code></pre>
<p>最后,我们把一切都放在画布上</p>
<pre><code># plot the function and the line collection
fig, ax = plt.subplots()
ax.plot(x,y)
ax.add_collection(lc)
</code></pre>