Python 如何将x轴从普通数字更改为日期和时间格式?
我正在生成一条高斯曲线,其峰值出现在用户输入的值处。我把频率定为1分钟,所以一天内我们总共有1440分钟 我写了一段代码,为我绘制图表。但是为了生成图形,我使用的是Python 如何将x轴从普通数字更改为日期和时间格式?,python,python-3.x,pandas,matplotlib,Python,Python 3.x,Pandas,Matplotlib,我正在生成一条高斯曲线,其峰值出现在用户输入的值处。我把频率定为1分钟,所以一天内我们总共有1440分钟 我写了一段代码,为我绘制图表。但是为了生成图形,我使用的是np.linspace(0124401440) 现在,我希望显示日期和时间,而不是x轴上0到1440的值。我有一系列的日期和时间:2018-01-01 00:00:00、2018-01-01 00:01:00、2018-01-01 00:02:00等等。但是,当我试图策划它,它需要永远的阴谋,它会卡住。你知道我该怎么做吗 峰值必须出现
np.linspace(0124401440)
现在,我希望显示日期和时间,而不是x轴上0到1440的值。我有一系列的日期和时间:2018-01-01 00:00:00、2018-01-01 00:01:00、2018-01-01 00:02:00
等等。但是,当我试图策划它,它需要永远的阴谋,它会卡住。你知道我该怎么做吗
峰值必须出现在2018-01-01 14:00:00
(这就是为什么我将mu
作为840)
当我运行此代码,并将峰值、面积、基值分别设为1000、700000、300时,我得到一个如下图:
我们可以看到,在x轴上有从0到1440的值。现在,我尝试将它们替换为date
中的值,如plt.plot(x,area*(stats.norm.pdf(x,mu,sigma))
和plt.plot(date,area*(stats.norm.pdf(x,mu,sigma))
,然后打开一个对话框,它将永远无法打印,并被卡住
如何实现这一点,以及如何确保峰值出现在
2018-01-01 14:00:00
?您的问题是将日期时间值字符串传递给matplotlib,matplotlib不知道如何处理它。您需要传递x轴的datetime对象或浮动。完成此操作后,您将需要调整体形大小和/或使用轴格式设置器,以便能够以所需的间隔查看所有时间
import matplotlib.pyplot as plt
import numpy as np
import scipy.stats as stats
import math
import pandas as pd
date = pd.date_range('2018-01-01','2018-01-01 23:59:59',freq='1min').tolist()
#date should be a list of date time objects. Don't use strftime to get strings.
mu = 840
def bell_curve(area, peak, base, dates):
x = np.linspace(0, 1440, 1440)
sigma = area/(math.sqrt(2*math.pi)*peak)
pdf_value = area*(stats.norm.pdf(x, mu, sigma))
plt.plot(dates, area*(stats.norm.pdf(x, mu, sigma)))
plt.show()
return pdf_value
peak = 1000
area = 700000
base = 300
pdf = bell_curve(area, peak, base,date)
import matplotlib.pyplot as plt
import numpy as np
import scipy.stats as stats
import math
import pandas as pd
date = pd.date_range('2018-01-01','2018-01-01 23:59:59',freq='1min').tolist()
#date should be a list of date time objects. Don't use strftime to get strings.
mu = 840
def bell_curve(area, peak, base, dates):
x = np.linspace(0, 1440, 1440)
sigma = area/(math.sqrt(2*math.pi)*peak)
pdf_value = area*(stats.norm.pdf(x, mu, sigma))
plt.plot(dates, area*(stats.norm.pdf(x, mu, sigma)))
plt.show()
return pdf_value
peak = 1000
area = 700000
base = 300
pdf = bell_curve(area, peak, base,date)