def plotStackedBarsScalar(df, indexCol, columns, valuesCol, box=False, rotation=90,
zeroLine=False, title="", xlabel='', ylabel='', ncol=5, ygrid=False,
yticks=False, ymin=None, ymax=None, barWidth=0.5, legendY=None,
palette=None, outFile=None, sideLabel=False, labelColor=None,
yFormat=None, transparent=False, openFile=False, closeFig=True):
'''
Plot a stacked bar plot using data in df, given the index column, the
column holding the values to pivot to columns, and the column holding
the values. The argument 'ncol' specifies the number of columns with
which to render the legend.
'''
#_logger.debug('plotStackedBarsScalar %s', sideLabel)
setupPlot()
# TBD: handle year values as columns to plot
df2 = df[[indexCol, columns, valuesCol]].pivot(index=indexCol, columns=columns, values=valuesCol)
setupPalette(len(df2.columns), pal=palette)
fig, ax = plt.subplots(1, 1, figsize=(8, 4))
df2.plot(kind='bar', stacked=True, ax=ax, grid=False, width=barWidth, rot=rotation)
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')
if zeroLine:
ax.axhline(0, color='k', linewidth=0.75, linestyle='-')
if ygrid:
ax.yaxis.grid(color='lightgrey', linestyle='solid')
plt.xlabel(xlabel)
plt.ylabel(ylabel)
legendY = -0.6 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)
if ymin is not None or ymax is not None:
ax.set_autoscale_on(False)
ax.set_ylim(ymin, ymax)
_finalizeFigure(fig, ax, outFile=outFile, sideLabel=sideLabel, labelColor=labelColor,
yFormat=yFormat, transparent=transparent, openFile=openFile, closeFig=closeFig)
return (fig, ax)
评论列表
文章目录