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

matplotlib中如何为数据点分配DataFrame对应二进制值

问题说明

使用matplotlib的plt接口创建二值地图时,已完成所有x、y坐标位置的数据点绘制,但无法从尺寸、形状与坐标网格完全一致的存储二值的DataFrame中,为每个数据点匹配对应二进制值,初始实现代码如下:

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
# gd是每个i,j索引位置都存储了二值的DataFrame
gd = pd.read_csv('SIG_Warehouse.csv',header=None)

x =[]
y =[]

for i in range(gd.shape[0]):
  for j in range(gd.shape[1]):
    x.append(i)
    y.append(j)


plt.scatter(x,y)
plt.show()
实现方案

当前代码仅遍历收集了网格坐标,没有同步提取每个(i,j)坐标对应的DataFrame二值,以下两种方案均可实现需求:

方案1:适配现有散点绘制逻辑

遍历坐标时同步提取对应位置的二值,传入plt.scatter()的c(颜色映射)参数即可,二值会自动映射为两种区分颜色,也可自定义参数调整显示效果:

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
gd = pd.read_csv('SIG_Warehouse.csv',header=None)

x = []
y = []
binary_vals = []
# 遍历坐标时同步收集对应位置的二值
for i in range(gd.shape[0]):
  for j in range(gd.shape[1]):
    x.append(i)
    y.append(j)
    binary_vals.append(gd.iloc[i, j])

# c参数传入二值序列,cmap自定义配色:binary为黑白二值,marker='s'设为方块标记,s参数调整标记大小适配网格
plt.scatter(x, y, c=binary_vals, cmap='binary', marker='s', s=50)
plt.colorbar(label='二值标识')
plt.show()

方案2:栅格直接绘制(更推荐)

二值地图属于规则栅格图,不需要手动遍历生成散点,直接调用plt.imshow()传入DataFrame的二维数组即可,代码更简洁、渲染效率更高,不会出现散点尺寸不匹配导致的栅格缝隙问题:

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
gd = pd.read_csv('SIG_Warehouse.csv',header=None)

# origin='lower'保证坐标原点在左下角,和散点绘制的坐标方向一致;extent参数可自定义x/y轴的数值范围
plt.imshow(gd.values, cmap='binary', origin='lower')
plt.colorbar(label='二值标识')
plt.show()

实现注意点

  • 取DataFrame对应位置的值时使用gd.iloc[i,j]按位置索引,不要直接用gd[i][j]或gd.loc[i,j],避免DataFrame索引不是默认从0开始的数字序列时取值出错
  • 二值配色可根据需求替换cmap参数,比如'gray'为灰度配色、'bwr'为蓝红对比配色
  • 若imshow绘制后坐标上下颠倒,调整origin参数为'upper'即可将第一行数据放在图像顶部

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 14:51:17