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

如何用Python创建带图例的分类柱状图并可视化游戏销售DataFrame

在Python中绘制指定DataFrame的分组柱状图

要实现你需要的可视化效果(以Year_of_Release为X轴,Global_Sales为柱高,Genre作为图例且不同类型对应不同颜色),可以用Matplotlib或Seaborn这两个常用库来实现,以下是具体方案:

先准备示例数据

假设你的DataFrame结构如下,我们先构造一个测试用例:

import pandas as pd

data = {
    'Year_of_Release': [2010, 2010, 2011, 2011, 2012, 2012, 2010, 2011],
    'Genre': ['Action', 'RPG', 'Action', 'RPG', 'Action', 'RPG', 'Adventure', 'Adventure'],
    'Global_Sales': [15.2, 8.7, 16.5, 9.3, 14.8, 10.1, 5.4, 6.2]
}
df = pd.DataFrame(data)

# 如果原始数据是单条游戏记录,需先按年份+类型聚合营收总和
df_agg = df.groupby(['Year_of_Release', 'Genre'])['Global_Sales'].sum().reset_index()

方法1:使用Seaborn(简洁高效)

Seaborn的barplot可以自动处理分组逻辑,无需手动计算柱子位置,适合快速实现需求:

import seaborn as sns
import matplotlib.pyplot as plt

# 设置绘图风格
sns.set_style("whitegrid")

# 创建画布
plt.figure(figsize=(10, 6))

# 绘制分组柱状图
sns.barplot(
    data=df_agg,
    x='Year_of_Release',    # X轴:发行年份
    y='Global_Sales',       # Y轴:全球营收
    hue='Genre',            # 分组依据:游戏类型
    palette='tab10'         # 颜色调色板,自动为不同Genre分配不同颜色
)

# 设置图表标签与标题
plt.xlabel('发行年份')
plt.ylabel('全球营收(单位:百万)')
plt.title('各年份不同类型游戏全球营收对比')

# 调整布局,避免标签被截断
plt.tight_layout()
plt.show()

方法2:使用Matplotlib(高度自定义)

如果需要更精细的控制(比如调整柱子间距、自定义颜色映射),可以用Matplotlib手动实现:

import matplotlib.pyplot as plt
import numpy as np

# 获取唯一的年份和游戏类型
unique_years = df_agg['Year_of_Release'].unique()
unique_genres = df_agg['Genre'].unique()
year_count = len(unique_years)
genre_count = len(unique_genres)

# 设置柱子宽度和基准X轴位置
bar_width = 0.2
x_base = np.arange(year_count)

# 创建画布
fig, ax = plt.subplots(figsize=(10, 6))

# 循环绘制每个Genre的柱子
for idx, genre in enumerate(unique_genres):
    # 筛选当前类型的聚合数据
    genre_data = df_agg[df_agg['Genre'] == genre]
    # 绘制柱子,位置根据类型索引偏移
    ax.bar(
        x_base + idx * bar_width,
        genre_data['Global_Sales'],
        width=bar_width,
        label=genre,
        alpha=0.8  # 柱子透明度
    )

# 设置X轴标签位置和内容
ax.set_xticks(x_base + bar_width * (genre_count - 1) / 2)
ax.set_xticklabels(unique_years)

# 设置图表标签与标题
ax.set_xlabel('发行年份')
ax.set_ylabel('全球营收(单位:百万)')
ax.set_title('各年份不同类型游戏全球营收对比')

# 添加图例(按Genre分组)
ax.legend(title='游戏类型', bbox_to_anchor=(1.05, 1), loc='upper left')

# 调整布局
plt.tight_layout()
plt.show()

说明

  • 如果你的原始DataFrame已经是按Year_of_Release和Genre聚合后的结果,可以跳过groupby步骤直接使用。
  • 调色板可以根据需求替换,比如palette='viridis'、palette='Set2',或者手动指定颜色列表(如palette=['#FF5733', '#33FF57', '#3357FF'])。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 07:54:17