我得到了以下python3代码,它生成线段
import numpy as np
import pylab as pl
from matplotlib import collections as mc
from matplotlib.colors import to_rgba # https://matplotlib.org/2.0.2/api/colors_api.html#matplotlib.colors.to_rgba
#https://stackoverflow.com/questions/21352580/matplotlib-plotting-numerous-disconnected-line-segments-with-different-colors
# to_rgba('violet')
lines = [
[(0, 1), (1, 1)],
[(2, 3), (3, 3)],
[(1, 2), (1, 3)]
]
colors = [
(1,0,0,1), # red
(0,1,0,1), # green
(0,0,1,1), # blue
]
z = [1,2,3]
c = np.array([(1, 0, 0, 1), (0, 1, 0, 1), (0, 0, 1, 1)])
lc = mc.LineCollection(lines, colors=('r','g','b'), linewidths=2)
fig, ax = pl.subplots()
ax.add_collection(lc)
ax.autoscale()
ax.margins(0.1)
fig.savefig('line.segments.svg', bbox_inches='tight', pad_inches = 0.05)
我一直在阅读Matplotlib: Plotting numerous disconnected line segments with different colors和Matplotlib: Assign Colors to Lines以及文档。
然而,我想根据z
的索引为线段着色。在元素e
处的线将具有由z[e]
的值设置的颜色。这就像散点图如何用颜色作为第三维来绘制。类似于此页面,https://www.statology.org/matplotlib-scatterplot-color-by-value/,但使用线段,而不是散点图。
我们的想法是设置一个比例,这样z
的最小值就可以算作coolwarm
色图的一端,而z
就可以算作最大值。在图的右侧会绘制一个颜色条,这样颜色就可以Map到z
。
我怎么能这样做?
1条答案
按热度按时间sqserrrh1#
如in the second example of this gallery所述,可以使用
Linecollection
中的array
参数直接将颜色Map到coolwarm
比例。可以通过将创建的line集合对象传递到
fig.colorbar
中来添加颜色条。