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

如何绘制样本列表中字符串项目位置出现占比的可视化图表

Got it!这个需求很清晰,咱们用Python的pandas+seaborn就能轻松实现,我给你拆解成数据预处理、百分比计算、图表绘制三个步骤,代码直接套用就行~

实现方案

1. 数据预处理:读取并解析有序项目列表

首先要把CSV里的有序项目列表拆分成对应位置的列,方便后续统计。假设你的项目列表是用逗号分隔的字符串(比如"A,S,P,X,N,R"),代码如下:

import pandas as pd

# 替换成你的CSV文件路径
df = pd.read_csv("your_samples.csv")

# 拆分有序项目列表为多列,每列对应一个位置
split_cols = df["有序项目列表"].str.split(",", expand=True)
# 给拆分后的列命名为「位置1」「位置2」...
split_cols.columns = [f"位置{i+1}" for i in range(split_cols.shape[1])]

# 合并回原DataFrame(可选,方便查看全量数据)
df = pd.concat([df, split_cols], axis=1)

如果你的项目列表用的是其他分隔符(比如分号),把str.split(",")里的逗号换成对应符号即可。

2. 计算每个位置各标签的出现百分比

接下来要统计每个位置中,A/S/P/X/N/R各自的出现次数,再转换成占该位置总样本数的百分比:

# 把位置列转成长格式,方便分组统计
melted = split_cols.melt(var_name="位置", value_name="标签")

# 统计每个位置每个标签的出现次数
counts = melted.groupby(["位置", "标签"]).size().reset_index(name="次数")

# 计算每个位置的总样本数
total_counts = melted.groupby("位置").size().reset_index(name="总次数")

# 合并数据并计算百分比
counts = counts.merge(total_counts, on="位置")
counts["百分比"] = (counts["次数"] / counts["总次数"]) * 100

# 补全缺失数据:确保6个标签在每个位置都有记录(避免某些标签在某位置没出现导致绘图缺失)
all_labels = ['A', 'S', 'P', 'X', 'N', 'R']
all_positions = split_cols.columns
full_index = pd.MultiIndex.from_product([all_positions, all_labels], names=["位置", "标签"])
counts = counts.set_index(["位置", "标签"]).reindex(full_index, fill_value=0).reset_index()

3. 绘制目标图表

用seaborn的点图来展示每个位置各标签的百分比,视觉上清晰直观:

import seaborn as sns
import matplotlib.pyplot as plt

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

# 创建画布,调整尺寸
plt.figure(figsize=(12, 6))

# 绘制点图:X轴是位置,Y轴是百分比,不同标签用不同标记区分
sns.pointplot(
    data=counts,
    x="位置",
    y="百分比",
    hue="标签",
    palette="tab10",
    markers=["o", "s", "^", "D", "v", "*"],  # 给每个标签分配独特标记
    linestyles=""  # 不画连接线,只显示点
)

# 设置图表标题和轴标签
plt.title("各标签在不同位置的出现百分比", fontsize=14)
plt.xlabel("位置", fontsize=12)
plt.ylabel("出现百分比(%)", fontsize=12)

# 调整图例位置,避免遮挡图表
plt.legend(title="标签", bbox_to_anchor=(1.05, 1), loc="upper left")

# 自动调整布局,保存图表(可选)
plt.tight_layout()
# plt.savefig("标签位置分布.png", dpi=300)
plt.show()

额外说明

  • 如果你的样本中存在项目列表长度不一致的情况,拆分后会出现NaN值,你可以根据需求用dropna()过滤掉无效样本,或者用特定值填充。
  • 要是需要调整图表样式(比如颜色、标记大小),直接修改pointplot里的参数即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:48:49