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

Matplotlib:如何让插值线条从首个数据点起始并消除垂直连线

解决方法(以Matplotlib为例)

核心思路很简单:只保留有有效数据的bins对应的坐标和数值,这样绘图时线条就只会在有效点之间连接,不会出现空bins带来的垂直连线了。


步骤1:先过滤掉空bins的数据

假设你已经有了自定义bins的x轴标签(比如x_bins)和对应的数据值(y_values),先把空bins的记录筛掉:

# 筛选出非空、非NaN的有效数据索引
valid_indices = [i for i, y in enumerate(y_values) if y != 0 and not pd.isna(y)]
# 提取过滤后的x和y值
filtered_x = [x_bins[i] for i in valid_indices]
filtered_y = [y_values[i] for i in valid_indices]

如果你的空bins对应的y值本来就是NaN,直接用pd.notna(y)判断就行,不用额外检查是否为0。

步骤2:绘制符合要求的线条

现在用过滤后的数据集绘图,线条自然只会连接有效数据点,而且从第一个有效点开始:

import matplotlib.pyplot as plt

# 直接绘制线条,不用画柱状图
plt.plot(filtered_x, filtered_y, marker='o', linestyle='-', color='#1f77b4')

# 按需设置图表标签和标题
plt.xlabel('Custom Bins')
plt.ylabel('Data Values')
plt.title('Line Plot of Valid Bin Data')

plt.show()

要是用Seaborn的话?

如果习惯用Seaborn绘图,先把数据转成DataFrame再过滤就行:

import seaborn as sns
import pandas as pd

# 把数据整理成DataFrame格式
df = pd.DataFrame({'bins': x_bins, 'values': y_values})
# 过滤空bins
df_valid = df[df['values'] != 0].dropna(subset=['values'])

# 绘制线条
sns.lineplot(data=df_valid, x='bins', y='values', marker='o')
plt.show()

为啥之前会有垂直连线?

其实就是空bins的y值被默认填充成0了,线条会强制连接「有效点→0→下一个有效点」,才出现了上下垂直的连线。把这些空点删掉后,线条就只会在有数据的点之间平滑连接,而且直接从第一个有效点起始,不会再从x轴底部开始啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 21:12:53