Измените цвета столбцов в столбчатой ​​диаграмме pandas matplotlib, передав список / кортеж - PullRequest
4 голосов
/ 10 июля 2020

На этом топи c есть несколько тем, но, похоже, ни одна из них не отвечает напрямую на мой вопрос. Я хотел бы построить гистограмму из фрейма данных pandas с настраиваемой цветовой схемой, которая не зависит от карты, например, использовать произвольный список цветов. Похоже, я могу передать объединенную строку с сокращенными именами цветов (первый пример ниже). Когда я использую предложение здесь , повторяется первый цвет (см. Второй пример ниже). В этом сообщении есть комментарий, который ускользает от того же поведения, которое я наблюдаю. Конечно, я мог бы сделать это, задав подзаговор, но я ленив и хочу сделать это одной строкой. Итак, я хотел бы использовать последний пример, в котором я передаю список шестнадцатеричных кодов, и он работает, как ожидалось. Я использую pandas версии> = 0.24 и версии matplotlib> 1.5. Мои вопросы:

  • Почему это происходит?
  • Что я делаю не так?
  • Могу ли я передать список цветов?
pd.DataFrame( [ 1, 2, 3, 4, 5 ] ).plot( kind="bar", color="brgmk" )

enter image description here

pd.DataFrame( [ 1, 2, 3, 4, 5 ] ).plot( kind="bar", color=[ "b", "r", "g", "m", "k" ] )

enter image description here

pd.DataFrame( [ 1, 2, 3, 4, 5 ] ).plot( kind="bar", color=[ "#0000FF", "#FF0000", "#008000", "#FF00FF", "#000000" ] )

введите описание изображения здесь

1 Ответ

2 голосов
/ 10 июля 2020

При построении фрейма данных первая информация о цвете используется для первого столбца, вторая - для второго столбца и т. Д. c. Информация о цвете может быть только одним значением, которое затем используется для всех строк этого столбца, или несколькими значениями, которые используются одно за другим для каждой строки столбца (повторяется с начала, если строк больше, чем цветов). См. Следующий пример:

pd.DataFrame( [[ 1, 4], [2, 5], [3, 6]] ).plot(kind="bar", color=[[ "b", "r", "g" ], "m"] )

enter image description here

So in your case you just need to put the list of color values in a list (specifically not a tuple):

pd.DataFrame( [ 1, 2, 3, 4, 5 ] ).plot( kind="bar", color=[[ "b", "r", "g", "m", "k" ]] )

or

pd.DataFrame( [ 1, 2, 3, 4, 5 ] ).plot( kind="bar", color=[[ "#0000FF", "#FF0000", "#008000", "#FF00FF", "#000000" ]] )

The first case in the OP (color="brgmk") works as expected as pandas внутренне помещает цветовую строку в список ( строки не считаются списковыми ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...