gpt4 book ai didi

python - 如何在 matplotlib 中平滑折线图?

转载 作者:行者123 更新时间:2023-12-04 03:23:28 25 4
gpt4 key购买 nike

我已经尝试了所有方法并在这里查看了其他线程,但是我找不到如何平滑 matplotlib 图表中的一条线。问题是在大多数教程中,两个轴都有数值,而在我的情况下,对于我的 x 轴,我有一个日期值......
这可能吗?如果没有,是否还有其他可视化库可以让我做到这一点?
这是我的代码:

date = ["Jan", "Feb", "Mar", "Apr", "May"]
value = [4,12,15,7,25]
plt.plot(date,value)

plt.show()
目前正在输出这个:
enter image description here
我想这样显示:
enter image description here
非常感谢!

最佳答案

我撤回了我的近距离投票,因为我错过了您针对 x 轴上的字符串绘制的问题(因此在它们之间进行插值更加困难)。正如其他人所建议的那样,关键是使用您的日期字符串来获取用于绘图和插值的数字。一旦你这样做了,this answer仍然是一个很好的框架。

import matplotlib.pyplot as plt
import numpy as np
from scipy.interpolate import make_interp_spline

# original data
date = ["Jan", "Feb", "Mar", "Apr", "May"]
value = [4,12,15,7,25]

# create integers from strings
idx = range(len(date))
xnew = np.linspace(min(idx), max(idx), 300)

# interpolation
spl = make_interp_spline(idx, value, k=3)
smooth = spl(xnew)

# plotting, and tick replacement
plt.plot(xnew, smooth)
plt.xticks(idx, date)
enter image description here idx是值 (0, 1, 2, 3, 4) , 用于绘图和插值。最后,调用 xticks用于使用日期字符串来标记那些刻度位置。
以上主要基于评论(来自 HenryEckerJohanC )。我想添加的新内容是进行插值的另一种方法是将字符串转换为实际日期时间:
import matplotlib.dates as mdates # for formatting
import matplotlib.pyplot as plt
from scipy.interpolate import make_interp_spline
import pandas as pd # for working with dates

# instead of ["Jan", "Feb", "Mar", "Apr", "May"], create datetime objects
date = pd.date_range('01-01-2020', freq='MS', periods=5)
# DatetimeIndex(['2020-01-01', '2020-02-01', '2020-03-01', '2020-04-01', '2020-05-01'], dtype='datetime64[ns]', freq='MS')

value = [4,12,15,7,25]

# now make new x positions using a date range, instead of linspace
# see here: https://stackoverflow.com/a/50728640/13386979
xnew = pd.date_range(date.min(), date.max(), periods=300)

# interpolation
spl = make_interp_spline(date, value, k=3)
smooth = spl(xnew)

# plotting
plt.plot(xnew, smooth)

# using mdates to get the x-axis formatted correctly
months = mdates.MonthLocator()
fmt = mdates.DateFormatter('%b') # %b -> Month as locale’s abbreviated name
ax = plt.gca()
ax.xaxis.set_major_locator(months)
ax.xaxis.set_major_formatter(fmt)
enter image description here
后一种方法涉及一些额外的格式化工作(和导入),但它在绘制时态数据方面更加明确。我发现这可以更直观地使用。例如,如果您有多个时间序列,您可以轻松地将它们并排绘制;您可以更轻松地在代码中引用特定日期;您不必记住哪些索引指的是哪些日期(例如,本例中的三月和 2)等...

关于python - 如何在 matplotlib 中平滑折线图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68087386/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com