仅在matplotlib中打印观测日期,跳过日期范围
我在仅在matplotlib中打印观测日期,跳过日期范围,matplotlib,Matplotlib,我在matplotlib中绘制了一个简单的数据框。然而,该图显示的是日期的范围,而不仅仅是两个观测数据点 如何只绘制两个数据点而不绘制日期范围 df结构: Date Number 2018-01-01 12:00:00 1 2018-02-01 12:00:00 2 import matplotlib.pyplot as plt fig, ax1 = plt.subplots( figsize=(4,5), dpi=72 )
matplotlib
中绘制了一个简单的数据框。然而,该图显示的是日期的范围,而不仅仅是两个观测数据点
如何只绘制两个数据点而不绘制日期范围
df结构:
Date Number
2018-01-01 12:00:00 1
2018-02-01 12:00:00 2
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()
matplotlib的输出code:
这是我所期望的(这是使用字符串而不是x轴数据上的日期来完成的):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)
绘图代码:
Date Number
2018-01-01 12:00:00 1
2018-02-01 12:00:00 2
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()
尝试添加以下内容:
import matplotlib.dates as mdates
myFmt = mdates.DateFormatter('%y-%m-%d')
ax1.xaxis.set_major_formatter(myFmt)
plt.xticks(df.index)
我认为在绘图时,日期被转换为大整数。所以width=0.75
非常小,试试更大的(比如width=20
):
Matplotlib条形图本质上是数字。如果您想要分类条形图,可以使用pandas条形图
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()