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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 06:06:33