如何在Python中绘制3×8结构的指定数据图表(非crosstab统计)
Python实现3×8矩阵数据可视化
以下是用Python结合pandas和seaborn实现你需求的方案,直接基于你提供的固定数据生成3行(B50、S50、B50-S50)8列(x1至x8)的可视化图表:
第一步:准备数据并导入依赖库
先把给定数据整理成pandas.DataFrame,再转置为你需要的行列结构:
import pandas as pd import seaborn as sns import matplotlib.pyplot as plt # 定义原始数据 data = { 'Sector': ['x1', 'x2', 'x3', 'x4', 'x5', 'x6', 'x7', 'x8'], 'B50': [19.94, 14.09, 9.33, 15.63, 8.25, 3.81, 11.88, 17.25], 'S50': [19.00, 12.29, 10.60, 12.01, 17.61, 3.48, 12.81, 12.16], 'B50 - S50': [0.94, 1.80, -1.27, 3.62, -9.36, 0.33, -0.93, 5.09] } # 转为DataFrame并转置,让B50、S50、B50-S50成为行,Sector成为列 df = pd.DataFrame(data).set_index('Sector').T
第二步:绘制热力图(直观展示数值分布)
热力图适合展示矩阵形式的数值数据,能清晰呈现每个单元格的数值大小:
plt.figure(figsize=(10, 4)) # 绘制热力图,显示数值、设置颜色映射 ax = sns.heatmap(df, annot=True, fmt='.2f', cmap='coolwarm', cbar=True) # 设置标题和轴标签 ax.set_title('3×8 Sector Data Visualization', fontsize=12) ax.set_ylabel('Metrics', fontsize=10) ax.set_xlabel('Sector', fontsize=10) # 调整布局避免标签截断 plt.tight_layout() plt.show()
备选:绘制分组条形图(对比各Sector下的指标)
如果需要对比每个Sector中三个指标的差异,可以用分组条形图:
plt.figure(figsize=(12, 6)) # 绘制条形图 df.T.plot(kind='bar', ax=plt.gca()) plt.title('Metrics by Sector', fontsize=12) plt.xlabel('Sector', fontsize=10) plt.ylabel('Value', fontsize=10) plt.legend(title='Metrics') plt.tight_layout() plt.show()
这两种方案都直接基于固定数据处理,不需要使用crosstab(),完全满足你要的3×8形式数据展示需求。
内容的提问来源于stack exchange,提问作者Larry
相关产品推荐
相关产品推荐

