Я дам объяснение того, что вы делаете, что, вероятно, поможет вам отладить вашу проблему.
np.linespace
np.linspace(.1, .9, 10)
возвращает 10 равномерно расположенных чисел в интервале 0,1 - 0,9 :
[0.1 0.18888889 0.27777778 0.36666667 0.45555556 0.544444440.63333333 0.72222222 0.81111111 0.9]
cm.seismi c
Затем вы вводите указанный выше массив в cm.seismic
. Это даст значение цвета для каждой точки linspace
, начиная с синего до красного.
Итак, набрав cm.seismic(np.linspace(.1, .9, 10))
, вы получите следующее цветовое отображение:
Red Green Blue Alpha (Opacity)
[0. 0. 0.5745098 1. ]
[0. 0. 0.82705882 1. ]
[0.11372549 0.11372549 1. 1. ]
[0.45882353 0.45882353 1. 1. ]
[0.81960784 0.81960784 1. 1. ]
[1. 0.81960784 0.81960784 1. ]
[1. 0.45882353 0.45882353 1. ]
[1. 0.11372549 0.11372549 1. ]
[0.87647059 0. 0. 1. ]
[0.69607843 0. 0. 1. ]
Итак, первая точка вашего data получит первую строку вышеуказанного массива в качестве значения цвета и т. д.
plt.bar
В вашем случае вы строите 4 точки данных (столбцы). Таким образом, первая полоса будет иметь в качестве цвета первая строка цветовой карты (0. 0. 0.5745098 1.
), которая является темно-синей.
Имея 4 полосы на ваших данных, вы будете использовать только первые 4 строки вашей цветовой карты, никогда не достигая красные цвета.
Код, который я использовал для воспроизведения вашего вопроса:
import numpy as np
import matplotlib.pyplot as plt
xvals = [0,1,2,3]
y = np.array([30000,35000,40000,50000])
cmap=plt.get_cmap("seismic")
print(np.linspace(.1, .9, 10))
my_colors = cmap(np.linspace(.1, .9, 10))
print(my_colors)
plt.bar(xvals, y, width = 1.0, tick_label = xvals, color=my_colors)
plt.show()
Наконец, , если вы пытаетесь добиться определенного c вывода, отредактируйте свой вопрос и Я обновлю свой ответ.