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

如何为不同Y值设置不同标记及优化多Y值X轴数据可视化

单个X对应多Y值的可视化问题解答

问题1:为不同Y值设置不同标记

可以通过按Y值分组绘制的方式实现,先定义Y值到标记的映射,再筛选出每个Y值对应的X数据,逐个调用plt.scatter设置对应标记。示例代码如下:

import matplotlib.pyplot as plt

xLables = ['A1','A2','A3','A4','A5']
YValues = [[1,2,3,4],[1,2,3,4,5,6,7],[1,2,3],[5,6,7],[1,2,3]]

# 整理成(X, Y)配对的列表
data_pairs = []
for idx, ys in enumerate(YValues):
    current_x = xLables[idx]
    for y in ys:
        data_pairs.append((current_x, y))

# 定义Y值与标记的映射,可根据需求扩展
y_marker_map = {
    1: '*',   # 星号
    2: 'D',   # 菱形
    3: '^',   # 上三角
    4: 'v',   # 下三角
    5: 'o',   # 圆形
    6: '<',   # 左三角
    7: '>'    # 右三角
}

# 按Y值分组绘制散点
for y_val, marker in y_marker_map.items():
    # 筛选当前Y值对应的所有X和Y数据
    target_x = [x for x, y in data_pairs if y == y_val]
    target_y = [y for x, y in data_pairs if y == y_val]
    plt.scatter(target_x, target_y, marker=marker, label=f"Y={y_val}")

plt.grid()
plt.legend(title="Y值")
plt.show()

这种方式能精准控制每个Y值对应的标记,同时通过图例清晰区分不同Y值。

问题2:更优的可视化方式

针对单个X对应多个Y值的场景,除了自定义标记的散点图,还有以下更合适的方案:

1. 蜂群图(Swarm Plot)

使用Seaborn的swarmplot,可以让每个数据点不重叠,清晰展示每个X分组下的所有Y值,还能通过颜色、样式区分不同Y值,适合展示原始数据分布:

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd

xLables = ['A1','A2','A3','A4','A5']
YValues = [[1,2,3,4],[1,2,3,4,5,6,7],[1,2,3],[5,6,7],[1,2,3]]

# 转换为DataFrame,适配Seaborn的接口
df = pd.DataFrame({
    "X": [xLables[i] for i, ys in enumerate(YValues) for _ in ys],
    "Y": [y for ys in YValues for y in ys]
})

# 绘制蜂群图,按Y值区分颜色和样式
sns.swarmplot(data=df, x="X", y="Y", hue="Y", style="Y", palette="viridis")
plt.grid(axis='y')
plt.legend(title="Y值", bbox_to_anchor=(1.05, 1), loc="upper left")
plt.tight_layout()
plt.show()

2. 箱线图(Box Plot)

如果更关注每个X分组下Y值的统计分布(中位数、四分位数、异常值等),箱线图是高效的选择:

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd

# 沿用上面的df数据
sns.boxplot(data=df, x="X", y="Y")
plt.grid(axis='y')
plt.show()

3. 小提琴图(Violin Plot)

结合了箱线图和密度图的优点,既能展示统计量,又能体现Y值的分布密度:

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd

# 沿用上面的df数据
sns.violinplot(data=df, x="X", y="Y")
plt.grid(axis='y')
plt.show()

这些方案可以根据你的需求选择:需要展示所有原始数据选蜂群图,关注统计分布选箱线图,兼顾分布密度选小提琴图。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 10:05:22