Alh*_*lta 2 python matplotlib pandas
我想做两件事:
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))
Run Code Online (Sandbox Code Playgroud)
设置格式。但我找不到将其设置为四分之一的方法。pandas 有 Q,(pandas 格式 datetimeindex 到quarters)但这在这里不起作用。我该怎么做呢?
dayloc = mdates.MonthLocator(bymonth=(3,6,9,12),bymonthday=30)
ax.xaxis.set_major_locator(dayloc)
Run Code Online (Sandbox Code Playgroud)
生成数据和绘图的完整代码如下:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from datetime import datetime
from datetime import timedelta
from pandas.plotting import register_matplotlib_converters
register_matplotlib_converters()
dti = pd.date_range('2012-12-31', periods=30, freq='Q')
s1 = pd.Series(range(30),index=dti)
s2 = pd.Series(np.random.randint(100,1000,size=(30)),index=dti)
df = s2.to_frame(name='count')
print(df)
f1 = plt.figure("Quarterly",figsize=(10,5))
ax = plt.subplot(1,1,1)
dayloc = mdates.MonthLocator(bymonth=(3,6,9,12),bymonthday=30)
ax.xaxis.set_major_locator(dayloc)
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))
y= [datetime.date(t) for t in df.index]
z= [datetime.date(t).replace(day=1)+timedelta(days=0) for t in df.index]
widths = [t1-t0-timedelta(days=0) for t0,t1 in zip(z,y)]
ax.bar(y,df['count'],width=widths)
plt.setp(ax.get_xticklabels(), rotation=90)
f1.tight_layout()
f1.show()
input()
Run Code Online (Sandbox Code Playgroud)
请尝试使用pd.DataFrame.to_period
pandas 绘图:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from datetime import datetime
from datetime import timedelta
%matplotlib inline
from pandas.plotting import register_matplotlib_converters
register_matplotlib_converters()
dti = pd.date_range('2012-12-31', periods=30, freq='Q')
s1 = pd.Series(range(30),index=dti)
s2 = pd.Series(np.random.randint(100,1000,size=(30)),index=dti)
df = s2.to_frame(name='count')
df = df.to_period(freq='Q')
print(df)
f1 = plt.figure("Quarterly",figsize=(10,5))
ax = plt.subplot(1,1,1)
# dayloc = mdates.MonthLocator([3,6,9,12])
# ax.xaxis.set_major_locator(dayloc)
# ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))
# y= [datetime.date(t) for t in df.index]
# z= [datetime.date(t).replace(day=1)+timedelta(days=0) for t in df.index]
# widths = [t1-t0-timedelta(days=0) for t0,t1 in zip(z,y)]
# ax.bar(y,df['count'],width=widths)
df.plot.bar(ax=ax)
plt.setp(ax.get_xticklabels(), rotation=90)
f1.tight_layout()
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4810 次 |
最近记录: |