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

Python散点图绘制:如何处理X轴重复值对应多Y值的情况

多类别DataFrame散点图:隐藏X轴+颜色区分方案

针对你提到的Column A含大量重复类别(100+)、Column B对应多组数值的散点图需求,无需转列表/字典,直接用pandas结合matplotlib或seaborn就能实现,核心思路是用颜色映射每个类别,隐藏X轴并配合图例展示。

先构造模拟数据

先生成符合你场景的测试DataFrame:

import pandas as pd
import numpy as np

# 生成120个唯一类别,500条数据
categories = [f'Category_{i}' for i in range(120)]
df = pd.DataFrame({
    'Column A': np.random.choice(categories, size=500),
    'Column B': np.random.normal(loc=50, scale=10, size=500)
})

方案1:Matplotlib原生实现

手动给每个类别分配颜色,固定X轴位置,隐藏X轴元素:

import matplotlib.pyplot as plt
from matplotlib import cm

# 获取所有唯一类别
unique_cats = df['Column A'].unique()
# 从colormap中生成对应数量的均匀颜色
colors = cm.viridis(np.linspace(0, 1, len(unique_cats)))

plt.figure(figsize=(10, 6))
# 循环绘制每个类别的散点
for cat, color in zip(unique_cats, colors):
    y_vals = df[df['Column A'] == cat]['Column B']
    # X轴用固定值0,因为要隐藏X轴,位置不影响
    plt.scatter([0]*len(y_vals), y_vals, color=color, label=cat, alpha=0.6)

# 完全隐藏X轴的刻度和标签
plt.xticks([])
plt.xlabel('')

# 把图例放在图外,避免遮挡(分2栏节省空间)
plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left', ncol=2)
plt.ylabel('Column B 数值')
plt.title('按类别分组散点图(隐藏X轴)')
plt.tight_layout()
plt.show()

方案2:Seaborn简洁实现

用seaborn的stripplot直接通过hue参数绑定类别,一行搞定分组:

import seaborn as sns

plt.figure(figsize=(10, 6))
# 用stripplot,hue区分Column A的类别,X轴固定为0
sns.stripplot(
    data=df,
    x=[0]*len(df),
    y='Column B',
    hue='Column A',
    alpha=0.6,
    jitter=True  # 给散点加抖动,避免重叠
)

# 隐藏X轴
plt.xticks([])
plt.xlabel('')

# 调整图例位置
plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left', ncol=2)
plt.ylabel('Column B 数值')
plt.title('按类别分组散点图(隐藏X轴)')
plt.tight_layout()
plt.show()

额外优化建议

  • 颜色自定义:如果不想用渐变colormap,可改用离散色板(如cm.tab20c)或手动指定颜色列表
  • 图例优化:类别过多时,可增加ncol参数分更多栏,或缩小图例字体(plt.legend(..., fontsize=8))
  • 灵活调整X轴:若想保留X轴位置但隐藏标签,可将X轴设为类别索引,再执行plt.xticks([], [])隐藏标签

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 07:30:52