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

如何用Python绘制同类别双列数据对比直方图?技术求助

按材料状态类别对比析出物数量的直方图绘制方案

你的原始代码仅单独绘制了两列数据的整体直方图,没有按MaterialState类别分组,因此无法展示类别维度的对比。以下是两种可实现需求的方案:

方式一:分面子图展示各材料状态的分布对比

该方案为每个材料状态生成独立子图,在子图中同时展示手动标注和流水线生成的析出物数量分布:

%matplotlib inline
import matplotlib.pyplot as plt
import pandas as pd

# 获取所有唯一的材料状态类别(任选一列即可,两类别的取值一致)
material_states = df['MaterialState_manual'].unique()

# 根据类别数量设置画布布局
fig, axes = plt.subplots(nrows=len(material_states)//2 + 1, ncols=2, figsize=(12, 8))
axes = axes.flatten()

for idx, state in enumerate(material_states):
    # 筛选对应类别的两类数据
    manual_data = df[df['MaterialState_manual'] == state]['Precipitates_manual']
    pipeline_data = df[df['MaterialState_pipeline'] == state]['Precipitates_pipeline']
    
    # 在子图中绘制重叠直方图,通过透明度区分两组数据
    axes[idx].hist(manual_data, bins=10, alpha=0.5, label='Manual')
    axes[idx].hist(pipeline_data, bins=10, alpha=0.5, label='Pipeline')
    axes[idx].set_title(f'Material State: {state}')
    axes[idx].legend()
    axes[idx].set_xlabel('Precipitate Count')
    axes[idx].set_ylabel('Frequency')

# 隐藏多余的空白子图(若类别数量为奇数)
for idx in range(len(material_states), len(axes)):
    axes[idx].axis('off')

plt.tight_layout()
plt.show()

方式二:分组并排柱状直方图

若希望同一类别下的两组数据以并排柱状形式对比分布统计,可采用此方案:

%matplotlib inline
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns  # 需先安装:pip install seaborn

# 将数据转换为长格式,便于分组处理
melted_df = pd.melt(df, 
                    id_vars=['MaterialState_manual'],
                    value_vars=['Precipitates_manual', 'Precipitates_pipeline'],
                    var_name='Data Source',
                    value_name='Precipitate Count')

# 绘制分组直方图
plt.figure(figsize=(14, 8))
sns.histplot(data=melted_df, 
             x='Precipitate Count', 
             hue='Data Source', 
             col='MaterialState_manual',
             bins=10,
             alpha=0.7,
             multiple='dodge')  # 设置为并排柱状模式

plt.tight_layout()
plt.show()

关键提示

  • 核心逻辑是先按MaterialState类别筛选数据,再分别绘制对应类别的两组析出物数量分布
  • 可根据实际数据分布调整bins参数(直方图区间数量),优化图表清晰度
  • 第一种方案适合逐个分析单类别的分布差异,第二种方案更直观对比同一类别下两组数据的分布

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 09:25:25