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

基于code、time_1与time_2的散点图绘制技术求助

解决方案:基于项目分组的时间散点图绘制

嘿,我来帮你搞定这个散点图的需求!你的场景是每个项目(code)有多个可变的time_1值,但每个项目的time_2是固定的,核心是要把这两个时间维度在图里清晰展现出来对吧?下面给你两种常用的实现方案,都是基于Python的主流可视化库,你可以按需选择:

方法1:用Seaborn快速实现(推荐)

Seaborn的分组散点图功能很适合你的场景,一行代码就能按code区分不同项目,还能轻松添加固定time_2的标记。

首先先模拟你的数据结构(你直接替换成自己的真实数据集就行):

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# 模拟你的数据集:code是项目标识,time_1每行不同,同一code的time_2相同
data = pd.DataFrame({
    'code': ['A', 'A', 'A', 'B', 'B', 'C', 'C', 'C', 'C'],
    'time_1': [10, 12, 15, 8, 9, 14, 16, 18, 20],
    'time_2': [13, 13, 13, 9, 9, 17, 17, 17, 17]
})

然后绘制散点图,同时为每个项目标记出固定的time_2:

# 设置清爽的绘图风格
sns.set_style("whitegrid")
plt.figure(figsize=(10, 6))

# 绘制每个项目的time_1散点,按code区分颜色
sns.scatterplot(data=data, x='code', y='time_1', hue='code', s=100, alpha=0.7, label='Time 1 (Variable)')

# 提取每个项目唯一的time_2值,用大的X形点标记
code_time2 = data[['code', 'time_2']].drop_duplicates()
sns.scatterplot(data=code_time2, x='code', y='time_2', hue='code', s=200, marker='X', label='Time 2 (Fixed per Project)')

# 美化图表细节
plt.title('Scatter Plot: Variable Time_1 vs Fixed Time_2 per Project', fontsize=14)
plt.xlabel('Project Code', fontsize=12)
plt.ylabel('Time Value', fontsize=12)
plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left')  # 把图例放在图外避免遮挡
plt.tight_layout()
plt.show()

方法2:用Matplotlib自定义绘制(更灵活)

如果你需要更个性化的样式(比如自定义标记、颜色、布局),可以用Matplotlib手动循环每个项目来绘制:

import pandas as pd
import matplotlib.pyplot as plt

# 同样用模拟数据,替换成你的真实数据即可
data = pd.DataFrame({
    'code': ['A', 'A', 'A', 'B', 'B', 'C', 'C', 'C', 'C'],
    'time_1': [10, 12, 15, 8, 9, 14, 16, 18, 20],
    'time_2': [13, 13, 13, 9, 9, 17, 17, 17, 17]
})

plt.figure(figsize=(10, 6))
unique_codes = data['code'].unique()
# 为每个项目分配不同的颜色
colors = plt.cm.tab10(range(len(unique_codes)))

# 循环处理每个项目
for i, code in enumerate(unique_codes):
    project_data = data[data['code'] == code]
    # 绘制当前项目的所有time_1散点
    plt.scatter([code]*len(project_data), project_data['time_1'], color=colors[i], s=100, alpha=0.7, label=f'{code} - Time 1')
    # 获取当前项目的固定time_2值,用X形点标记
    time2_val = project_data['time_2'].iloc[0]
    plt.scatter(code, time2_val, color=colors[i], s=200, marker='X', label=f'{code} - Time 2')

# 美化图表
plt.title('Time Distribution by Project', fontsize=14)
plt.xlabel('Project Code', fontsize=12)
plt.ylabel('Time', fontsize=12)
plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left')
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.tight_layout()
plt.show()

额外小提示

如果你的time_1和time_2是datetime日期类型(不是数值),只需要添加一行代码来优化日期标签的显示:

plt.gcf().autofmt_xdate()  # 旋转日期标签,避免重叠

另外,如果你想直接对比每个time_1相对于固定time_2的偏移,可以把time_1和time_2分别作为横轴和纵轴:

sns.scatterplot(data=data, x='time_1', y='time_2', hue='code', s=100)

内容的提问来源于stack exchange,提问作者Gus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:42:52