我有这个代码:
import matplotlib.pyplot as plt
for (i,j) in selected:
plt.plot([plants_points[i][0],customers_points[j][0]], [plants_points[i][1],customers_points[j][1]], 'r-')
但是,我希望表示的函数为每个 i
具有不同的颜色。例如,如果 i = 1
为红色并显示为一条线 (r-
) 如果 i = 2
为蓝色并显示为一条线 (b-
) 等. 问题是我没有定义范围,即i
可以取用户想要的任意多个值。有什么方法可以实现吗?谢谢。
答案 0 :(得分:0)
selected
是元组 (i, j)
的列表,您希望 i
的每个值都有不同的颜色。 i
的每个值可能在 selected
中出现多次。
import matplotlib.pyplot as plt
# Use a colormap to generate an arbitrary number of colours
cmap = plt.get_cmap('jet')
# Get the unique values for i, and assign a colour to each one
i_values = set([s[0] for s in selected])
i_colours = {i: cmap(idx / len(i_values)) for idx, i in enumerate(i_values)}
# When plotting, choose the colour by looking up i in i_colours:
fig, ax = plt.subplots(1)
for i, j in selected:
colour = i_colours[i]
ax.plot([0, 1], [j, j], '-', c=colour)
如果您对将要出现的 i
的值了解得更多一些,您或许可以避免使用字典。例如,如果您知道 i
在其最小值和最大值之间分布合理,那么您可以改为这样做:
# Use a colormap to generate an arbitrary number of colours
cmap = plt.get_cmap('jet')
# Get the unique values for i, and assign a colour to each one
i_values = set([s[0] for s in selected])
i_min = min(i_values)
i_max = max(i_values)
# When plotting, choose the colour by calculating its position in cmap:
fig, ax = plt.subplots(1)
for i, j in selected:
colour = cmap((i - i_min) / (i_max - i_min))
ax.plot([0, 1], [j, j], '-', c=colour)
选择使用哪个颜色图可能很困难 - 如果 i
的值有意义,那么顺序颜色图很有用,如果您想更好地区分附近的值,请考虑类似 {{1} }.