Python中基于Matplotlib绘制带二分类标签着色的二维散点图技术求助
解决Matplotlib散点图按二分类标签着色的问题
嘿,别发愁!你之前对scatter函数的用法有点误解——它完全支持同时传入两个特征作为横纵轴,还能轻松根据标签给点设置对应颜色。我给你一步步拆解实现方法:
方法1:一次性绘制所有点,手动映射标签到颜色
这种方法适合快速生成图表,我们先把标签和对应颜色做个映射,再传给scatter的c参数:
import matplotlib.pyplot as plt import numpy as np # 假设你的X是numpy数组(如果是列表可以转成np.array) # 这里先模拟生成100×2的特征和对应标签,你可以替换成自己的数据 X = np.random.randn(100, 2) y = np.random.choice([-1, 1], size=100) # 拆分横、纵轴对应的特征 x_axis = X[:, 0] y_axis = X[:, 1] # 建立标签到颜色的映射关系 color_mapping = {-1: 'red', 1: 'yellow'} # 把每个标签转换成对应的点颜色 point_colors = [color_mapping[label] for label in y] # 绘制散点图 plt.scatter(x_axis, y_axis, c=point_colors, alpha=0.7) # 添加图表基础元素 plt.xlabel('特征1') plt.ylabel('特征2') plt.title('二分类数据散点图(按标签着色)') # 手动添加图例:因为直接用c参数无法自动生成图例,所以创建虚拟点来对应 from matplotlib.lines import Line2D legend_items = [ Line2D([0], [0], marker='o', color='w', markerfacecolor='red', markersize=10, label='标签-1'), Line2D([0], [0], marker='o', color='w', markerfacecolor='yellow', markersize=10, label='标签1') ] plt.legend(handles=legend_items) plt.show()
方法2:分开绘制两类标签的点
如果想要更灵活的控制(比如给不同类设置不同的标记样式),可以先筛选出两类数据再分别绘制:
import matplotlib.pyplot as plt import numpy as np # 模拟数据(替换成你自己的X和y即可) X = np.random.randn(100, 2) y = np.random.choice([-1, 1], size=100) # 筛选出标签为-1和1的对应数据 data_neg = X[y == -1] data_pos = X[y == 1] # 分别绘制两类点,直接通过label参数生成图例 plt.scatter(data_neg[:, 0], data_neg[:, 1], color='red', alpha=0.7, label='标签-1') plt.scatter(data_pos[:, 0], data_pos[:, 1], color='yellow', alpha=0.7, label='标签1') # 添加图表元素 plt.xlabel('特征1') plt.ylabel('特征2') plt.title('二分类数据散点图(按标签着色)') plt.legend() plt.show()
这两种方法都能实现你想要的效果,第二种方法的优势是可以直接通过label参数自动生成图例,不需要手动创建元素,你可以根据自己的需求选择~
内容的提问来源于stack exchange,提问作者anon
相关产品推荐
相关产品推荐

