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

Matplotlib绘制散点图如何为每个赛事在色条中分配不同独立颜色

问题根因

  • 你当前使用的tab20c色谱仅包含20种独立颜色,而你统计的赛事条目共46个,颜色数量不足以覆盖全部分类,导致颜色重复、色条映射异常
  • 色条默认展示空间不足,多标签重叠导致无法完整显示所有赛事名称

修复方案

更换支持更多颜色的色谱,同时调整画布、色条参数适配多标签展示,完整修改后代码如下:

import pandas as pd
import collections
import matplotlib.pyplot as plt

if __name__ == '__main__':
    # 读取Excel文件
    games_male_attendance = collections.OrderedDict()
    games_female_attendance = collections.OrderedDict()
    df = pd.read_excel("Olympic-dataset.xlsx", usecols=["Game_Discipline", "Male", "Female"])

    for index, row in df.iterrows():
        game_name = row["Game_Discipline"]
        male_attendance = row["Male"]
        female_attendance = row["Female"]

        if game_name not in games_male_attendance:
            games_male_attendance[game_name] = male_attendance

        if game_name not in games_female_attendance:
            games_female_attendance[game_name] = female_attendance

    list_male_attendance = list(games_male_attendance.values())
    list_female_attendance = list(games_female_attendance.values())
    classes = list(games_male_attendance.keys())
    class_count = len(classes)

    # 更换为turbo色谱,内置256种独立颜色,完全覆盖46个分类需求
    colors = plt.cm.get_cmap('turbo', class_count)

    # 调整画布尺寸,避免元素拥挤
    plt.figure(figsize=(12, 8))
    scatter = plt.scatter(
        y=list_male_attendance, 
        x=list_female_attendance, 
        c=range(class_count), 
        cmap=colors, 
        vmin=0, 
        vmax=class_count-1
    )
    # 调整色条参数,拉长色条、缩小标签字体
    cbar = plt.colorbar(scatter, fraction=0.046, pad=0.04)
    cbar.ax.set_yticks(range(class_count), labels=classes, fontsize=7)
    plt.ylabel("男子参赛人数")
    plt.xlabel("女子参赛人数")
    plt.title("各赛事男女参赛人数散点图")

    plt.show()

效果说明

修改后每个赛事都会映射唯一的独立颜色,色条可完整展示所有46个赛事名称,不再出现颜色重复、标签截断的问题。

内容的提问来源于stack exchange,提问作者Tilak Raj

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 15:06:07