def plotStackedTimeSeries(df, index='region', xlabel='', ylabel='', ncol=5, box=False,
zeroLine=False, title="", ygrid=False, yticks=False,
ymin=None, ymax=None, barWidth=0.5, legendY=None, yearStep=5,
palette=None, outFile=None, sideLabel=False, labelColor=None,
yFormat=None, transparent=False, openFile=False, closeFig=True):
#_logger.debug('plotStackedTimeSeries %s', sideLabel)
setupPlot()
df = dropExtraCols(df, inplace=False)
grouped = df.groupby(index)
df2 = grouped.aggregate(np.sum)
df3 = df2.transpose()
setupPalette(len(df3.columns), pal=palette)
fig, ax = plt.subplots(1, 1, figsize=(8, 4))
df3.plot(kind='bar', stacked=True, ax=ax, grid=False, width=barWidth)
# space out year labels to every 5 years
locs, labels = plt.xticks()
yearCols = filter(str.isdigit, df.columns)
if int(yearCols[1]) - int(yearCols[0]) == 1 and yearStep > 1:
plt.xticks(locs[::yearStep], yearCols[::yearStep])
if box == False:
sns.despine(left=True)
if yticks:
plt.tick_params(axis='y', direction='out', length=5, width=.75,
colors='k', left='on', right='off')
lines = ax.get_lines()
if lines:
lines[0].set_visible(False) # get rid of ugly dashed line
if zeroLine:
ax.axhline(0, color='k', linewidth=0.75, linestyle='-')
if ygrid:
ax.yaxis.grid(color='lightgrey', linestyle='solid')
if ymin is not None or ymax is not None:
ax.set_autoscale_on(False)
ax.set_ylim(ymin, ymax)
plt.xlabel(xlabel)
plt.ylabel(ylabel)
legendY = -0.2 if legendY is None else legendY
ax.legend(loc='upper center', bbox_to_anchor=(0.5, legendY), ncol=ncol)
if title:
ax.set_title(title, y=1.05)
_finalizeFigure(fig, ax, outFile=outFile, sideLabel=sideLabel, labelColor=labelColor,
yFormat=yFormat, transparent=transparent, openFile=openFile, closeFig=closeFig)
return (fig, ax)
评论列表
文章目录