Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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 如何使用matplotlib根据x轴上的特定日期打印数据_Python_Date_Matplotlib - Fatal编程技术网

Python 如何使用matplotlib根据x轴上的特定日期打印数据

Python 如何使用matplotlib根据x轴上的特定日期打印数据,python,date,matplotlib,Python,Date,Matplotlib,我有一个由日期-值对组成的数据集。我想把它们画成一个条形图,在x轴上标出具体的日期 我的问题是matplotlib在整个日期范围内分发xtick;并使用点绘制数据 日期都是datetime对象。以下是数据集的示例: data = [(DT.datetime.strptime('2010-02-05', "%Y-%m-%d"), 123), (DT.datetime.strptime('2010-02-19', "%Y-%m-%d"), 678), (DT.date

我有一个由日期-值对组成的数据集。我想把它们画成一个条形图,在x轴上标出具体的日期

我的问题是
matplotlib
在整个日期范围内分发
xtick
;并使用点绘制数据

日期都是
datetime
对象。以下是数据集的示例:

data = [(DT.datetime.strptime('2010-02-05', "%Y-%m-%d"), 123),
        (DT.datetime.strptime('2010-02-19', "%Y-%m-%d"), 678),
        (DT.datetime.strptime('2010-03-05', "%Y-%m-%d"), 987),
        (DT.datetime.strptime('2010-03-19', "%Y-%m-%d"), 345)]
下面是一个使用
pyplot

import datetime as DT
from matplotlib import pyplot as plt

data = [(DT.datetime.strptime('2010-02-05', "%Y-%m-%d"), 123),
        (DT.datetime.strptime('2010-02-19', "%Y-%m-%d"), 678),
        (DT.datetime.strptime('2010-03-05', "%Y-%m-%d"), 987),
        (DT.datetime.strptime('2010-03-19', "%Y-%m-%d"), 345)]

x = [date for (date, value) in data]
y = [value for (date, value) in data]

fig = plt.figure()

graph = fig.add_subplot(111)
graph.plot_date(x,y)

plt.show()
问题摘要:
我的情况更像是有一个
Axes
实例准备就绪(由上面代码中的
graph
引用),我希望执行以下操作:

  • 使
    xtick
    与确切的日期值相对应。我听说过
    matplotlib.dates.DateLocator
    ,但我不知道如何创建一个,然后将它与特定的
    轴关联起来
    
  • 更严格地控制所使用的图形类型(条形图、直线图、点图等)

  • 您所做的非常简单,只使用plot而不是plot_date是最简单的。plot_date适用于更复杂的情况,但设置您需要的内容可以轻松完成

    e、 例如,根据您上面的示例:

    import datetime as DT
    from matplotlib import pyplot as plt
    from matplotlib.dates import date2num
    
    data = [(DT.datetime.strptime('2010-02-05', "%Y-%m-%d"), 123),
            (DT.datetime.strptime('2010-02-19', "%Y-%m-%d"), 678),
            (DT.datetime.strptime('2010-03-05', "%Y-%m-%d"), 987),
            (DT.datetime.strptime('2010-03-19', "%Y-%m-%d"), 345)]
    
    x = [date2num(date) for (date, value) in data]
    y = [value for (date, value) in data]
    
    fig = plt.figure()
    
    graph = fig.add_subplot(111)
    
    # Plot the data as a red line with round markers
    graph.plot(x,y,'r-o')
    
    # Set the xtick locations to correspond to just the dates you entered.
    graph.set_xticks(x)
    
    # Set the xtick labels to correspond to just the dates you entered.
    graph.set_xticklabels(
            [date.strftime("%Y-%m-%d") for (date, value) in data]
            )
    
    plt.show()
    
    如果您喜欢条形图,只需使用。要了解如何设置直线和标记样式,请参见

    只是一个提示:由于您的问题实际上纯粹是关于matplotlib的,并且没有任何特定于wxWidgets的内容,因此如果您更改示例以使用
    matplotlib.pyplot
    中的函数,而不使用wx内容,可能会使事情变得更简单。@David:已修复。谢谢,我意识到可能会有更多的人能够阅读
    matplotlib
    +
    pyplot
    而不是
    matplotlib
    +
    wx