Python 尝试将颜色渐变添加到Matplotlib图表

Python 尝试将颜色渐变添加到Matplotlib图表,python,matplotlib,Python,Matplotlib,我正在尝试为我的图表添加一个从红色到绿色的渐变色。但是,当我运行以下命令时,我得到: 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_LENGT

我正在尝试为我的图表添加一个从红色到绿色的渐变色。但是,当我运行以下命令时,我得到:

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>]

有什么想法吗

Matplotlib无法与
Color.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()

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

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()

哪种说法会导致错误?@AzatIbrakov我添加了更多细节,谢谢,效果很好。我把你的东西插入我的代码中,我看到了所有列中表示的颜色。问题是它们随机出现,这意味着有高条是纯红色,短条是纯红色。。。红色/绿色的高条和相同色调的短条等。有没有办法根据图中条本身的高度/值更改颜色?当它向右移动时,栏杆不会逐渐升高,就像你看到的那样。它们的大小是随机的。如果不是这样的话,这仍然比纯蓝色更好。当然,我的意思是,你找到的所有示例都使用颜色贴图,然后很容易得到各个条的颜色。我更新了答案。这非常有效,非常感谢您花时间写出来并解释它!
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()