我想从我的数据框中绘制一个图表(该图表具有每日数据),并希望xlables显示为几个月(涵盖所有每日数据周期)。 例如,如果我有2010年1月1日至2010年12月31日之间的数据,我想要365天的数据点,但在x轴上我只想要1月,2月,3月等...每个月覆盖相应日期的确切期间。努力得到这个...
这是DataFrame:
Daily CP ROI S2 positive Month Day
Date
2008-01-02 100087.000 True January 2
2008-01-03 101967.000 True January 3
2008-01-04 102167.000 True January 4
2008-01-07 104004.000 True January 7
2008-01-08 105192.000 True January 8
pl_plot = pl_plot.set_index('Date')
figure(num=None, figsize=(20, 8), dpi=80, facecolor='w', edgecolor='k')
plt.ylabel('USD', fontsize=18)
plt.rc('ytick',labelsize=16)
final_value = new_df_test.iloc[ei-2]['Daily_Compound_ROI']
roi = round(((final_value - very_init_budget)/very_init_budget)*100,3)
roi_s=str(roi)
plt_title_s = new_title+'\nPeriod: '+y_init_s+'-'+y_end_s+', (ROI: '+roi_s+'%)'
plt.title(plt_title_s, fontsize=24)
pl_plot['positive'] = pl_plot['Daily_Compound_ROI'] > 100000
pl_plot['Daily CP ROI S2'].plot(kind='bar', color=pl_plot.positive.map({True: '#5cb85c', False: 'r'}))
ax1 = plt.axes()
plt.rc('xtick',labelsize=14)
x_axis = ax1.axes.get_xaxis()
x_axis.set_visible(True)
我想得到类似下面的内容(当值低于100000时保持红色,否则为绿色),但是在x轴上希望看到Jan,Feb,Mar等...没有任何内容几个月之间的间隔(不想看到我现在看到的每一天)。
答案 0 :(得分:1)
IIUC,您可以尝试seaborn
。
如果在数据框中添加一个月和日列,则可以创建一个包含每月分隔的条块的条形图。
示例:
# import pandas as pd
# import numpy as np
# df = pd.DataFrame(index=pd.date_range('15.8.2019', '27.11.2019'))
# df['Value'] = np.random.random(len(df))
# df['Month'] = df.index.month_name()
# df['Day'] = df.index.day
# Value Month Day
# 2019-08-15 0.813130 August 15
# 2019-08-16 0.850873 August 16
# 2019-08-17 0.728416 August 17
# 2019-08-18 0.326072 August 18
# 2019-08-19 0.880385 August 19
# ... ... ..
# 2019-11-23 0.771801 November 23
# 2019-11-24 0.638811 November 24
# 2019-11-25 0.824542 November 25
# 2019-11-26 0.451075 November 26
# 2019-11-27 0.151469 November 27
鉴于此数据框,您可以
import seaborn as sns
sns.catplot(kind='bar', x='Month', y='Value', hue='Day', data=df, color='b', legend=False)
产生
答案 1 :(得分:-1)
当我回答自己的问题时,这看起来很奇怪。 无论如何,我找到了方法:
from matplotlib.dates import DateFormatter
import matplotlib.dates as mdates
import seaborn as sns
from pandas.plotting import register_matplotlib_converters
register_matplotlib_converters()
sns.set(font_scale=1.5, style="whitegrid")
fig, ax = plt.subplots(figsize=(20, 8))
ax.bar(df.index.values, df['Daily CP ROI S2'].values, width=1, color=pl_plot.positive.map({True: '#5cb85c', False: 'r'}))
ax.set(#xlabel="Period", ylabel="USD", title=title1)
ax.title.set(fontsize=24)
ax.xaxis.set_major_locator(mdates.MonthLocator(interval=1))
ax.xaxis.set_major_formatter(DateFormatter("%b"))
plt.show()
以上解决了问题,下面是我得到的:
剩下的唯一问题是,现在我需要在图表中放入标题:)将照管此事,但是如果有任何建议,请继续!谢谢。