更改图的颜色

时间:2021-03-18 11:11:22

标签: python matplotlib

我有这个代码:

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可以取用户想要的任意多个值。有什么方法可以实现吗?谢谢。

1 个答案:

答案 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} }.