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

如何创建带归一化标记透明度的散点图并修正图表形状

问题解决

1. 修正图表形状(解决行顺序颠倒/疑似转置问题)

Matplotlib默认y轴原点在左下角,而你的DataFrame行索引是从上到下排列的,直接用行索引作为y值会导致第0行出现在图表最下方,和原DataFrame的布局颠倒。解决方式是反转y轴的数值,让第0行对应图表最上方:

  • 将生成y的代码改为y = np.tile(ox[::-1], (len(df), 1)),实现行索引的反转映射。

x对应DataFrame的列索引,保持原有生成逻辑即可,这样每个点的位置会和DataFrame单元格的位置完全匹配。

2. 根据数值调整透明度

把DataFrame的数值归一化到0-1区间,数值越低透明度越浅(alpha越小),越高透明度越深(alpha越大)。手动计算归一化后的alpha值:

alpha_vals = (df.values - df.values.min()) / (df.values.max() - df.values.min())

然后在plt.scatter()中指定alpha=alpha_vals.ravel()(scatter要求传入一维数组)。

完整修正代码

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

rng = np.random.default_rng(seed=111)
rints = rng.integers(low=0, high=1000, size=(5,5))
df = pd.DataFrame(rints)

ox = np.arange(len(df))
# x对应列索引,保持原有逻辑
x = np.tile(ox[:, np.newaxis], (1, len(ox)))
# y对应反转后的行索引,匹配DataFrame的行顺序
y = np.tile(ox[::-1], (len(df), 1))

# 计算归一化的透明度值
alpha_vals = (df.values - df.values.min()) / (df.values.max() - df.values.min())

plt.scatter(x, y, marker='o', color='tab:orange', ec='k', ls='--', 
            s=df.values.ravel(), alpha=alpha_vals.ravel())

# 添加单元格数值标注
for ix, iy, v in zip(x.ravel(), y.ravel(), df.values.ravel()):
    plt.annotate(str(v), (ix, iy), textcoords='offset points', xytext=(0,10), ha='center')
        
plt.axis("off")
plt.margins(y=0.2)
plt.show()

关键说明

  • 反转y轴索引后,图表行顺序和DataFrame完全一致,第0行在最上方,第4行在最下方;
  • 透明度归一化后,数值最小的单元格(如83)颜色最浅,数值最大的(如968)颜色最深;
  • s=df.values.ravel()确保标记大小和单元格数值的对应逻辑不变。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 16:18:21