Только построение наблюдаемых дат в matplotlib, пропуск диапазона дат - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть простой фрейм данных, который я строю в matplotlib. Однако на графике показан диапазон дат, а не только две наблюдаемые точки данных.

Как я могу построить только две точки данных, а не диапазон дат?

df структура:

Date                  Number
2018-01-01 12:00:00   1  
2018-02-01 12:00:00   2

Вывод кода matplotlib:

Boxplot

Вот что я ожидал (это было сделано с использованием строки, а не даты на данных оси X):
enter image description here

код df:

import pandas as pd
df = pd.DataFrame([['2018-01-01 12:00:00', 1], ['2018-02-01 12:00:00',2]], columns=['Date', 'Number'])  
df['Date'] = pd.to_datetime(df['Date'])  
df.set_index(['Date'],inplace=True)  

Код участка:

import matplotlib.pyplot as plt

fig, ax1 = plt.subplots(
    figsize=(4,5), 
    dpi=72
)

width = 0.75

#starts the bar chart creation
ax1.bar(df.index, df['Number'], 
        width, 
        align='center', 
        color=('#666666', '#333333'), 
        edgecolor='#FF0000',
        linewidth=2
       ) 
ax1.set_ylim(0,3)
ax1.set_ylabel('Score')

fig.autofmt_xdate()

#Title
plt.title('Scores by group and gender')

plt.tight_layout() 
plt.show()

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

Matplotlib барные графики имеют числовой характер. Если вместо этого вам нужен категорический линейчатый график, вы можете использовать графики панда.

df.plot.bar()

Затем вы можете немного украсить этикетки

import matplotlib.pyplot as plt
import pandas as pd
df = pd.DataFrame([['2018-01-01 12:00:00', 1], ['2018-02-01 12:00:00',2]], columns=['Date', 'Number'])  
df['Date'] = pd.to_datetime(df['Date'])  
df.set_index(['Date'],inplace=True) 

ax = df.plot.bar()
ax.tick_params(axis="x", rotation=0)
ax.set_xticklabels([t.get_text().split()[0] for t in ax.get_xticklabels()])

plt.show()

enter image description here

0 голосов
/ 10 сентября 2018

Попробуйте добавить что-то вроде:

import matplotlib.dates as mdates

myFmt = mdates.DateFormatter('%y-%m-%d')
ax1.xaxis.set_major_formatter(myFmt)
plt.xticks(df.index)

correct_figure

Я думаю, что даты преобразуются в большие целые числа во время графика. Так что width = 0.75 очень маленький, попробуйте что-то большее (например, width = 20:

another_plot

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...