仅在matplotlib中绘制观测日期,跳过日期范围

时间:2018-09-10 03:21:06

标签: matplotlib

我在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 :(得分:0)

尝试添加以下内容:

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

答案 1 :(得分:0)

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