如何在Python中实现二维属性排序并构建散点图?
在Python中实现双属性二维排序与可视化
1. 先准备示例数据
用pandas快速构建和你示例一致的数据集:
import pandas as pd data = [ {"name": "a", "attr1": 1, "attr2": 3}, {"name": "b", "attr1": 2, "attr2": 1} ] df = pd.DataFrame(data)
2. 双属性排序的两种实用思路
思路1:按综合指标排序
如果想让条目同时靠近attr1和attr2的最小值,可以计算每个条目到原点的综合距离(比如曼哈顿距离、欧氏距离),按距离从小到大排序:
# 计算曼哈顿距离(attr1+attr2),也可以换成欧氏距离:(df['attr1']**2 + df['attr2']**2)**0.5 df['combined'] = df['attr1'] + df['attr2'] sorted_df = df.sort_values('combined').drop('combined', axis=1) print(sorted_df)
输出结果会优先展示双属性综合值最小的条目,满足双属性同时升序的需求。
思路2:构建二维矩阵
如果要直接生成按attr1(列)和attr2(行)升序排列的矩阵,可以用透视表实现:
# 行按attr2升序,列按attr1升序,单元格填充name pivot_matrix = df.pivot(index='attr2', columns='attr1', values='name') # 分别对行和列按数值升序排序 pivot_matrix = pivot_matrix.sort_index(axis=0).sort_index(axis=1) print(pivot_matrix)
这样得到的矩阵就是严格按两个属性升序排列的二维结构。
3. 用散点图实现可视化的二维排序效果
用matplotlib画散点图,直接呈现每个条目在双属性维度的位置,直观实现散点图式二维排序:
import matplotlib.pyplot as plt # 先按attr1升序整理数据,方便x轴展示 plot_df = df.sort_values('attr1') # 绘制散点 plt.scatter(plot_df['attr1'], plot_df['attr2']) # 给每个点标注名称 for _, row in plot_df.iterrows(): plt.text(row['attr1'] + 0.05, row['attr2'] + 0.05, row['name']) # 设置坐标轴和标题 plt.xlabel('attr1 (从左到右升序)') plt.ylabel('attr2 (从下到上升序)') plt.title('双属性二维排序散点图') plt.grid(True) plt.show()
运行后会得到一张散点图,x轴从左到右对应attr1升序,y轴从下到上对应attr2升序,每个点的位置精准反映条目在双属性维度的排序位置。
内容的提问来源于stack exchange,提问作者Arvin Nick
相关产品推荐
相关产品推荐

