如何使用Matplotlib绘制含自定义属性的Point对象散点图?
解决用Matplotlib绘制自定义Point类数组散点图的问题
嘿,我懂你遇到的困扰了——用numpy存了自定义的Point对象数组,想直接靠对象的color属性画散点图却报错,对吧?核心问题其实是Matplotlib的scatter函数没法直接识别你的自定义类对象,它需要的是单独的坐标序列和颜色序列,而不是打包好的对象数组。
咱们一步步来修正你的代码:
完整可运行代码
import numpy as np import matplotlib.pyplot as plt N = 10 class Point: def __init__(self, x_axis, y_axis, color, add_info): self.x_axis = x_axis self.y_axis = y_axis self.color = color self.add_info = add_info # 生成存储Point对象的numpy数组 points = np.empty([N], dtype=Point) for i in range(N): # 这里改成了随机颜色方便看效果,你也可以换回固定的'red' color = 'red' if i % 2 == 0 else 'blue' points[i] = Point(np.random.uniform(0, 1), np.random.uniform(0, 1), color, 1) # 关键步骤:从每个Point对象中提取需要的属性 x_coords = [p.x_axis for p in points] # 提取所有x坐标 y_coords = [p.y_axis for p in points] # 提取所有y坐标 point_colors = [p.color for p in points] # 提取所有点的颜色 # 绘制散点图 plt.scatter(x_coords, y_coords, color=point_colors) plt.xlabel('X Axis') plt.ylabel('Y Axis') plt.title('Scatter Plot of Custom Point Objects') plt.show()
关键说明
- 属性提取:用列表推导式把数组里每个Point对象的
x_axis、y_axis和color分别提取出来,变成Matplotlib能识别的序列。你也可以用numpy数组存储这些值(比如np.array([p.x_axis for p in points])),效果完全一致。 scatter参数适配:把提取好的坐标和颜色序列传入scatter函数,color参数会自动对应每个点的颜色属性。
如果你更习惯用numpy风格的批量处理,也可以用np.vectorize来提取属性,代码如下:
# 用vectorize批量提取属性 get_x = np.vectorize(lambda p: p.x_axis) get_y = np.vectorize(lambda p: p.y_axis) get_color = np.vectorize(lambda p: p.color) x_coords = get_x(points) y_coords = get_y(points) point_colors = get_color(points)
这样修改后,你就能顺利画出对应颜色的散点图啦!
内容的提问来源于stack exchange,提问作者MATH101
相关产品推荐
相关产品推荐

