matplotlib 为线条指定颜色

owfi6suc  于 2023-10-24  发布在  其他
关注(0)|答案(2)|浏览(157)

我尝试在matplotlib中绘制一个可变数量的线,其中X,Y数据和颜色存储在numpy数组中,如下所示。是否有一种方法可以将颜色数组传递到plot函数中,这样我就不必额外为每条线分配颜色?我是否应该将RGB颜色数组转换为另一种颜色格式,例如HSV或其他?

  1. import numpy as np
  2. X = np.arange(1990, 1994)
  3. Y = [[ 1.50615936e+08 5.88252480e+07 2.60363587e+08]
  4. [ 1.53193798e+08 5.91663430e+07 2.63123995e+08]
  5. [ 1.55704596e+08 5.94899260e+07 2.65840188e+08]
  6. [ 1.58175186e+08 5.97843680e+07 2.68559452e+08]]
  7. colors = [(0.99609375, 0.3984375, 0.3984375) (0.796875, 0.0, 0.99609375)
  8. (0.59765625, 0.99609375, 0.0)]
  9. #current way
  10. ax.plot(X, Y)
  11. [ax.lines[i].set_color(color) for i, color in enumerate(colors)]
  12. #way I feel it can be done, but doesn't work currently
  13. ax.plot(X, Y, color=colors)
  14. plt.show()

任何帮助都非常感谢。

5fjcxozz

5fjcxozz1#

我认为你想使用Axes方法set_color_cycle。正如你所想象的,它设置了默认分配颜色时循环的颜色列表,即当没有颜色关键字提供给plot调用时。这里是你的例子的扩展版本:

  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. X = np.arange(1990, 1994)
  4. Y = [[ 1.50615936e+08, 5.88252480e+07, 2.60363587e+08],
  5. [ 1.53193798e+08, 5.91663430e+07, 2.63123995e+08],
  6. [ 1.55704596e+08, 5.94899260e+07, 2.65840188e+08],
  7. [ 1.58175186e+08, 5.97843680e+07, 2.68559452e+08]]
  8. colors = [(0.99609375, 0.3984375, 0.3984375),
  9. (0.796875, 0.0, 0.99609375),
  10. (0.59765625, 0.99609375, 0.0)]
  11. fig = plt.figure()
  12. ax1 = fig.add_subplot(211)
  13. ax1.set_title('old way')
  14. ax1.plot(X, Y)
  15. [ax1.lines[i].set_color(color) for i, color in enumerate(colors)]
  16. ax2 = fig.add_subplot(212)
  17. ax2.set_title('new way')
  18. ax2.set_color_cycle(colors)
  19. ax2.plot(X, Y)
  20. fig.savefig('manycolors.py')
  21. plt.show()

这将产生两个具有相同颜色线的子图:

展开查看全部
8ljdwjyq

8ljdwjyq2#

仍然有一个比@Yann建议的 * 更新 * 的“新方法”,因为Matplotlib版本1.5。(depricated)你应该使用set_prop_cycle.这里你有他的例子重做.我还建议你使用Seaborn,它有很多预先定义的调色板,你可以选择颜色的数量.调色板的颜色是基于Colorbrewer,一个工具来选择好的颜色图。这是我的@Yann代码版本:

  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. import seaborn as sns
  4. X = np.arange(1990, 1994)
  5. Y = [[ 1.50615936e+08, 5.88252480e+07, 2.60363587e+08],
  6. [ 1.53193798e+08, 5.91663430e+07, 2.63123995e+08],
  7. [ 1.55704596e+08, 5.94899260e+07, 2.65840188e+08],
  8. [ 1.58175186e+08, 5.97843680e+07, 2.68559452e+08]]
  9. colors = sns.color_palette("hls", len(Y[0]))
  10. fig = plt.figure()
  11. ax1 = fig.add_subplot(211)
  12. ax1.set_title('old way')
  13. ax1.plot(X, Y)
  14. [ax1.lines[i].set_color(color) for i, color in enumerate(colors)]
  15. ax2 = fig.add_subplot(212)
  16. ax2.set_title('new way')
  17. ax2.set_prop_cycle('color', colors)
  18. ax2.plot(X, Y)
  19. plt.show()
展开查看全部

相关问题