使用Python基于DataFrame在图像上按标签颜色标记坐标点
需求说明
现有一张输入图像,以及一个1000行3列的DataFrame,列分别为X坐标、Y坐标和Label(取值0-5)。需要完成以下操作:
- 读取该图像
- 根据DataFrame中的坐标定位图像对应位置
- 依据Label列用不同颜色标记这些坐标点并显示图像
示例DataFrame:
data = {'X': [200, 246, 387, 86, 100], 'Y': [100, 200, 34, 98, 234], 'Label': [0,1,2,3,4]} df = pd.DataFrame(data)
当前已实现单个点绘制的代码:
import matplotlib.pyplot as plt img = plt.imread('../data/textures/test/test_image.jpg') fig, ax = plt.subplots() ax.imshow(img, extent=[0, 400, 0, 300]) ax.plot(200, 200, 'x', color='firebrick')
实现方案
通过按Label分组批量绘制的方式,高效完成多颜色标记需求,完整代码如下:
import matplotlib.pyplot as plt import pandas as pd # 读取目标图像 img = plt.imread('../data/textures/test/test_image.jpg') # 示例DataFrame(实际使用时替换为你的真实数据) data = {'X': [200, 246, 387, 86, 100, 150], 'Y': [100, 200, 34, 98, 234, 180], 'Label': [0,1,2,3,4,0]} df = pd.DataFrame(data) # 自定义Label与颜色的映射关系(可根据需求调整) color_map = {0: 'firebrick', 1: 'forestgreen', 2: 'royalblue', 3: 'gold', 4: 'purple', 5: 'cyan'} # 初始化绘图画布 fig, ax = plt.subplots() ax.imshow(img, extent=[0, 400, 0, 300]) # 按Label分组,批量绘制对应坐标点 for label, group in df.groupby('Label'): ax.plot(group['X'], group['Y'], 'x', color=color_map[label], label=f'Label {label}') # 添加图例(可选,用于直观区分不同Label的颜色) ax.legend() # 显示最终图像 plt.show()
关键说明
- 颜色映射:
color_map字典可自由修改,确保每个Label对应唯一且易区分的颜色即可 - 分组绘制:使用
groupby('Label')将同Label的坐标归为一组,比循环单个点的效率更高,适合处理1000行的大数据量 - extent参数:需保证该参数的坐标范围与DataFrame中X、Y的取值范围匹配,若图像实际尺寸不同,需对应调整此参数
- 图例:若不需要区分颜色对应的Label,可删除
ax.legend()一行
内容的提问来源于stack exchange,提问作者Arica Christensen
相关产品推荐
相关产品推荐

