利用Python和Matplotlib实现趋势线分析与绘制

分类: bt365如何 2025-10-23 18:08:17 作者: admin

趋势线

趋势线是用来显示数据趋势或者预测未来发展方向的一种图形表示方法。在统计学和数据分析中,趋势线通常是通过拟合数据点来找到一条最符合数据整体趋势的直线、曲线或者其他形状。常见的趋势线拟合方法包括线性回归、多项式回归、指数平滑等。

趋势线在金融分析、市场预测、销售趋势分析、科学研究等领域都有广泛的应用。通过趋势线,人们可以更清晰地了解数据的走势,从而做出更加准确的决策。

在图表中,趋势线通常以一条穿过数据点的曲线或直线的形式呈现,使得观察者可以更容易地识别出数据的趋势方向。

示例代码

import numpy as np

import matplotlib.pyplot as plt

# 生成一些示例数据

x = np.linspace(0, 10, 100)

y = 2 * x + np.random.normal(0, 1, 100) # 线性上升的数据,加入一些噪声

# 绘制原始曲线

plt.plot(x, y, label='Data')

# 使用线性回归拟合趋势线

slope, intercept = np.polyfit(x, y, 1)

trendline = slope * x + intercept

# 绘制趋势线

plt.plot(x, trendline, color='red', linestyle='--', label='Trendline')

# 添加图例和标签

plt.legend()

plt.title('Data with Trendline')

plt.xlabel('X')

plt.ylabel('Y')

# 显示图形

plt.show()

结果展示

补充:横轴不连续的趋势图

这里主要用到brokenaxes库,可以使坐标轴不连续。

示例代码

import numpy as np

import matplotlib.pyplot as plt

from brokenaxes import brokenaxes

# 生成一些示例数据

x = np.linspace(0, 10, 100)

y = 2 * x + np.random.normal(0, 1, 100) # 线性上升的数据,加入一些噪声

# 将数据分成两段

x1, y1 = x[:40], y[:40]

x2, y2 = x[60:], y[60:]

# 创建一个BrokenAxes对象

bax = brokenaxes(xlims=((0, 4), (6, 10)), hspace=0.05)

# 绘制第一段趋势线

slope1, intercept1 = np.polyfit(x1, y1, 1)

trendline1 = slope1 * x1 + intercept1

bax.plot(x1, y1, label='Segment 1', color='blue')

bax.plot(x1, trendline1, color='red', linestyle='--', label='Trendline 1')

# 绘制第二段趋势线

slope2, intercept2 = np.polyfit(x2, y2, 1)

trendline2 = slope2 * x2 + intercept2

bax.plot(x2, y2, label='Segment 2', color='orange')

bax.plot(x2, trendline2, color='green', linestyle='--', label='Trendline 2')

# 添加标题和标签

bax.set_xlabel('X Label')

bax.set_ylabel('Y Label')

bax.set_title('Data with Trendline (Broken Axes)')

# 显示图例

bax.legend(loc='lower right')

# 显示图形

plt.show()

结果展示