Как построить данные по конкретным датам на оси x, используя matplotlib

У меня есть набор данных, состоящий из пар значений даты. Я хочу построить их на гистограмме с конкретными датами на оси х.

Моя проблема в том, что matplotlib распределяет xticks по всему диапазону дат; а также отображает данные с помощью точек.

Датами являются все объекты 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 ready (ссылка на graph в коде выше), и я хочу сделать следующее:

  1. Сделайте xticks соответствуют точным значениям даты. Я слышал о matplotlib.dates.DateLocator но я понятия не имею, как создать его, а затем связать с конкретным объектом Axes .
  2. Получите более жесткий контроль над типом используемого графика (бар, линия, точки и т. Д.).

То, что вы делаете, достаточно просто, что проще всего использовать сюжет, а не plot_date. plot_date отлично подходит для более сложных случаев, но настройка того, что вам нужно, может быть легко выполнена без него.

например, исходя из вашего примера выше:

 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() 

Если вы предпочтете график plt.bar() , просто используйте plt.bar() . Чтобы понять, как установить стили линий и маркеров, см. plt.plot() Сюжет с метками даты в местах расположения маркеров http://www.geology.wisc.edu/~jkington/matplotlib_date_labels.png