Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将x轴从普通数字更改为日期和时间格式?_Python_Python 3.x_Pandas_Matplotlib - Fatal编程技术网

Python 如何将x轴从普通数字更改为日期和时间格式?

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等等。但是,当我试图策划它,它需要永远的阴谋,它会卡住。你知道我该怎么做吗 峰值必须出现

我正在生成一条高斯曲线,其峰值出现在用户输入的值处。我把频率定为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
等等。但是,当我试图策划它,它需要永远的阴谋,它会卡住。你知道我该怎么做吗

峰值必须出现在
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)