Попытка добавить цветовые градиенты на график Matplotlib - PullRequest
0 голосов
/ 09 июня 2018

Я пытаюсь добавить градиент от красного к зеленому для моих графиков.Однако, когда я запускаю следующее, я получаю:

TypeError: object of type 'Color' has no len()

Вот фрагмент соответствующего кода:

from colour import Color

red = Color("red")
colors = list(red.range_to(Color("green"),10))

for col in ['DISTINCT_COUNT', 'NULL_COUNT','MAX_COL_LENGTH', 'MIN_COL_LENGTH']: 
    grid[['COLUMN_NM', col]].set_index('COLUMN_NM').plot.bar(title=table_nm, figsize=(12, 8), color=colors)
    plt.xlabel('Column', labelpad=12)
    plt.tight_layout()
    plt.show()

Если я просто запускаю верхнюю часть и печатаю результаты, онакажется, работает нормально:

red = Color("red")
colors = list(red.range_to(Color("green"),10))
print(colors)

[<Color red>, <Color #f13600>, <Color #e36500>, <Color #d58e00>, <Color #c7b000>, <Color #a4b800>, <Color #72aa00>, <Color #459c00>, <Color #208e00>, <Color green>]

Так должно быть, когда я пытаюсь использовать его здесь:

grid[['COLUMN_NM', col]].set_index('COLUMN_NM').plot.bar(title=table_nm, figsize=(12, 8), color=colors)

Есть идеи?

1 Ответ

0 голосов
/ 09 июня 2018

Matplotlib не может работать с colour.Color экземплярами.Вы можете преобразовать их в значения RGB, если хотите.

Далее, пандам не нравится, когда им дают несколько цветов.Но вместо этого вы можете использовать сюжет matplotlib.

import matplotlib.pyplot as plt
import pandas as pd
from colour import Color

df = pd.DataFrame({"x" : list(range(3,13))})

red = Color("red")
colors = list(red.range_to(Color("green"),10))
colors = [color.rgb for color in colors]

plt.bar(df.index, df["x"], color=colors)
plt.xlabel('Column', labelpad=12)
plt.tight_layout()
plt.show()

enter image description here

Обратите внимание, что обычно вы предпочитаете работать с картой цветов.Вы можете вызвать эту цветовую карту с нормализованными значениями, в соответствии с которыми вы хотите раскрасить столбики.

import matplotlib.pyplot as plt
import matplotlib.colors as mcolors
import pandas as pd
import numpy as np

df = pd.DataFrame({"x" : np.random.rand(10)*10})

cmap = mcolors.LinearSegmentedColormap.from_list("", ["red", "yellow", "green"])

plt.bar(df.index, df["x"], color=cmap(df.x.values/df.x.values.max()))
plt.xlabel('Column', labelpad=12)
plt.tight_layout()
plt.show()

enter image description here

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