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

非数值数据集折线图绘制报错及可视化、轴间距调整咨询

解决你的可视化问题

1. 绘制John的采购次数折线图(修复报错)

你碰到的No numeric types to aggregate错误,核心原因是seaborn.lineplot默认会对y轴数据做聚合统计,但你传入的Customer_name是字符串类型,根本没法做数值聚合。要实现John的采购日期标记,我们得先预处理数据,步骤如下:

步骤1:清洗并筛选数据

先确保DeliveryDate是标准日期格式(建议明确指定解析列,避免自动解析踩坑),再筛选出John的记录,按日期统计采购次数:

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

# 读取数据,明确解析DeliveryDate为日期类型
hr_data = pd.read_excel(r"D:\data\Days_Calculation.xlsx", parse_dates=['DeliveryDate'])

# 筛选John的记录,按日期统计采购次数
john_data = hr_data[hr_data['Customer_name'] == 'John']
john_purchase_counts = john_data.groupby('DeliveryDate').size().reset_index(name='Purchase_Count')

步骤2:绘制可视化图

如果只是想标记John的采购日期,散点图会比折线图更直观(折线图连接不连续日期会显得奇怪),两种方案都给你:

# 散点图:精准标记John的采购日期
sns.scatterplot(data=john_purchase_counts, x='DeliveryDate', y='Purchase_Count', s=120, color='#2ecc71')
plt.title("John's Purchase Dates")
plt.ylabel("Purchase Count")
plt.show()

# 折线图:若需展示趋势(注意不连续日期的折线可能不符合预期)
sns.lineplot(data=john_purchase_counts, x='DeliveryDate', y='Purchase_Count', marker='o', linewidth=2)
plt.title("John's Purchase Trend")
plt.ylabel("Purchase Count")
plt.show()

这样就能在01.01.2019、03.04.2018和04.09.2019这三个日期处正确显示John的采购次数了。

2. 字符串(Customer Name)与数值(DeliveryQuantity总和)的可视化

要展示每个客户的送货量总和,条形图是最直观的选择,实现步骤如下:

步骤1:按客户分组计算总送货量

# 按客户分组,求和送货量
customer_total = hr_data.groupby('Customer_name')['DeliveryQuantity'].sum().reset_index(name='Total_Delivery')

步骤2:绘制条形图

# 纵向条形图
sns.barplot(data=customer_total, x='Customer_name', y='Total_Delivery', palette='coolwarm')
plt.title("Total Delivery Quantity per Customer")
plt.xlabel("Customer Name")
plt.ylabel("Total Delivery Quantity")
plt.xticks(rotation=45)  # 旋转x轴标签避免重叠
plt.show()

# 横向条形图(适合客户名较长的场景)
sns.barplot(data=customer_total, y='Customer_name', x='Total_Delivery', palette='coolwarm')
plt.title("Total Delivery Quantity per Customer")
plt.ylabel("Customer Name")
plt.xlabel("Total Delivery Quantity")
plt.show()

3. 调整绘图的轴间距(非标签)

你说的“轴间距”应该是指绘图区域和画布边缘的留白,或者坐标轴内部的刻度间距,这里给你两种常用调整方式:

方法1:自动优化间距

用plt.tight_layout()自动调整子图参数,避免标签和轴重叠,同时优化留白:

sns.barplot(data=customer_total, x='Customer_name', y='Total_Delivery')
plt.tight_layout()
plt.show()

方法2:手动自定义边距

用plt.subplots_adjust()精准控制上下左右的留白比例(取值0-1,代表画布的相对位置):

sns.barplot(data=customer_total, x='Customer_name', y='Total_Delivery')
# 自定义边距:left=左留白, right=右留白, bottom=下留白, top=上留白
plt.subplots_adjust(left=0.18, right=0.95, bottom=0.25, top=0.9)
plt.show()

如果想调整坐标轴刻度之间的距离,可以通过设置画布大小间接实现:

# 增大画布宽度,让x轴刻度更宽松
fig, ax = plt.subplots(figsize=(10, 6))
sns.barplot(data=customer_total, x='Customer_name', y='Total_Delivery', ax=ax)
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:52:36