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

如何用Matplotlib绘制以二维数组值为标记大小的散点图?

解决Matplotlib Scatter绘制索引坐标+元素值为尺寸的问题

你的代码目前只绘制了单个点,因为plt.scatter(z,z, s=z_combo[i,j])里的z,z是单个坐标,z_combo[i,j]是循环结束后的最后一个元素值,完全没遍历所有数组元素。要实现你要的效果,得把所有索引对作为坐标,对应元素值作为点的大小,步骤如下:

问题核心修正

  • 需要生成所有网格点的x、y坐标数组,而非单个坐标值
  • 把二维的z_combo展平成一维数组,对应每个点的尺寸
  • 原始组合数数值偏小,需乘以缩放因子让点的大小更直观

修正后的完整代码

# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
import numpy as np

z = 11
z_combo = np.zeros((z,z))
z_combo[0,0] = 1

# 生成杨辉三角(帕斯卡三角),修正边界索引错误
for i in range(1,z):
    for j in range(z):
        if j == 0:
            z_combo[i,j] = z_combo[i-1,j]
        else:
            z_combo[i,j] = z_combo[i-1,j-1] + z_combo[i-1,j]

# 生成所有点的x、y坐标:用meshgrid创建网格,再展平成一维数组
x, y = np.meshgrid(np.arange(z), np.arange(z))
x_flat = x.flatten()
y_flat = y.flatten()

# 把组合数值展平,乘以缩放因子让点大小更明显
sizes = z_combo.flatten() * 10

# 绘制散点图
plt.scatter(x_flat, y_flat, s=sizes, alpha=0.7, color='#1f77b4')

# 调整坐标轴和样式
plt.xlim(-0.5, z-0.5)
plt.ylim(-0.5, z-0.5)
plt.xlabel('X 索引')
plt.ylabel('Y 索引')
plt.title('基于数组索引和元素值的散点图')
plt.grid(True, linestyle='--', alpha=0.5)

plt.show()

关键说明

  1. 坐标生成:np.meshgrid生成z×z的网格坐标矩阵,flatten()将其转为一维数组,刚好对应每个数组元素的索引位置
  2. 尺寸处理:z_combo.flatten()把二维数组转成和坐标长度一致的一维数组,乘以10是因为原始组合数直接作为size会导致点过小,可根据需求调整缩放因子
  3. 边界修正:原循环中j=0时会出现负索引错误,新增判断保证杨辉三角生成正确
  4. 样式优化:alpha设置透明度避免重叠点遮挡,网格线方便对应索引位置

运行后就能得到你想要的效果:每个点的位置对应数组的(i,j)索引,点的大小由z_combo[i,j]的数值决定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 19:45:49