尝试向 Matplotlib 图表添加颜色渐变

JD2*_*775 2 python matplotlib

我正在尝试为我的图表添加红色到绿色的颜色渐变。然而,当我运行以下命令时,我得到:

TypeError: object of type 'Color' has no len()
Run Code Online (Sandbox Code Playgroud)

这是相关代码:

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()
Run Code Online (Sandbox Code Playgroud)

如果我只运行顶部部分并打印结果,它似乎运行良好:

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>]
Run Code Online (Sandbox Code Playgroud)

所以当我尝试在这里使用它时一定是这样:

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

有任何想法吗?

Imp*_*est 6

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()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

请注意,通常您更愿意使用颜色图。您可以使用标准化值来调用此颜色图,根据这些标准化值对条形进行着色。

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()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述