You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Matplotlib的默认colormap?两种尝试方法未生效

解决Matplotlib柱状图默认配色修改问题

Matplotlib默认采用tab10配色方案,我希望将默认配色改为Set3这类方案,但尝试了plt.rcParams['image.cmap'] = 'Set3'和plt.set_cmap('Set3')两种方法均未生效,原代码及运行效果如下:

原代码

import matplotlib.pyplot as plt
import numpy as np

plt.rcParams['image.cmap']='Set3'
plt.set_cmap('Set3')

species = ('Adelie', 'Chinstrap', 'Gentoo')
sex_counts = {
    'Male': np.array([73, 34, 61]),
    'Female': np.array([73, 34, 58]),
}

width = 0.6  # 柱子宽度

fig, ax = plt.subplots()
bottom = np.zeros(3)

for sex, sex_count in sex_counts.items():
    p = ax.bar(species, sex_count, width, label=sex, bottom=bottom)
    bottom += sex_count

    ax.bar_label(p, label_type='center')

ax.set_title('按性别统计企鹅数量')
ax.legend()

plt.show()

问题原因

image.cmap和set_cmap()是针对图像类绘图(如imshow)的配色设置,而柱状图、折线图这类元素的默认颜色循环,由axes.prop_cycle参数控制,因此之前的设置无法影响柱状图颜色。

解决方案

方法1:修改全局默认颜色循环

通过plt.rcParams['axes.prop_cycle']指定Set3配色的颜色循环:

import matplotlib.pyplot as plt
import numpy as np

# 获取Set3的颜色列表,生成全局颜色循环
set3_cmap = plt.get_cmap('Set3')
plt.rcParams['axes.prop_cycle'] = plt.cycler(color=set3_cmap.colors)

species = ('Adelie', 'Chinstrap', 'Gentoo')
sex_counts = {
    'Male': np.array([73, 34, 61]),
    'Female': np.array([73, 34, 58]),
}

width = 0.6

fig, ax = plt.subplots()
bottom = np.zeros(3)

for sex, sex_count in sex_counts.items():
    p = ax.bar(species, sex_count, width, label=sex, bottom=bottom)
    bottom += sex_count
    ax.bar_label(p, label_type='center')

ax.set_title('按性别统计企鹅数量')
ax.legend()

plt.show()

方法2:手动给柱状图指定颜色

若不想修改全局设置,可直接在bar函数中指定color参数,从Set3配色中选取对应颜色:

import matplotlib.pyplot as plt
import numpy as np

species = ('Adelie', 'Chinstrap', 'Gentoo')
sex_counts = {
    'Male': np.array([73, 34, 61]),
    'Female': np.array([73, 34, 58]),
}

width = 0.6
set3_cmap = plt.get_cmap('Set3')
# 从Set3中取对应数量的颜色,匹配性别分类
colors = [set3_cmap(i) for i in range(len(sex_counts))]

fig, ax = plt.subplots()
bottom = np.zeros(3)

for (sex, sex_count), color in zip(sex_counts.items(), colors):
    p = ax.bar(species, sex_count, width, label=sex, bottom=bottom, color=color)
    bottom += sex_count
    ax.bar_label(p, label_type='center')

ax.set_title('按性别统计企鹅数量')
ax.legend()

plt.show()

以上两种方法均可让柱状图应用Set3配色方案。

内容的提问来源于stack exchange,提问作者Stücke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 04:09:28