matplotlib barplot间距无法正常工作

时间:2019-01-02 10:53:40

标签: python dataframe matplotlib

我正在使用matplotlib和pandas DataFrame绘制如下的barplot:

pdata = pd.DataFrame([[11.14285714,  6.33333333,  2.52380952],
       [10.47619048,  6.61904762,  2.9047619 ],
       [10.80952381,  6.19047619,  3.        ],
       [11.0952381 ,  6.66666667,  2.23809524],
       [10.14285714,  4.9047619 ,  4.95238095],
       [ 9.61904762,  5.71428571,  4.66666667],
       [10.0952381 ,  5.14285714,  4.76190476],
       [ 9.47619048,  5.14285714,  5.38095238],
       [10.66666667,  4.38095238,  4.95238095],
       [ 9.66666667,  5.04761905,  5.28571429],
       [10.33333333,  4.95238095,  4.71428571],
       [10.85714286,  4.9047619 ,  4.23809524],
       [ 9.71428571,  4.9047619 ,  5.38095238],
       [10.71428571,  4.52380952,  4.76190476],
       [ 9.57142857,  3.71428571,  6.71428571],
       [11.61904762,  5.47619048,  2.9047619 ],
       [12.23809524,  5.23809524,  2.52380952],
       [11.28571429,  7.28571429,  1.42857143],
       [10.52380952,  6.52380952,  2.95238095],
       [10.80952381,  6.38095238,  2.80952381],
       [10.95238095,  7.71428571,  1.33333333],
       [11.0952381 ,  7.42857143,  1.47619048],
       [10.0952381 ,  8.71428571,  1.19047619],
       [10.42857143,  8.42857143,  1.14285714],
       [10.57142857,  7.95238095,  1.47619048],
       [10.14285714,  8.66666667,  1.19047619],
       [ 9.38095238,  9.38095238,  1.23809524],
       [ 8.9047619 ,  9.80952381,  1.28571429],
       [10.66666667,  8.04761905,  1.28571429],
       [ 9.19047619,  9.19047619,  1.61904762]])
pdata.index = np.arange(30)+1

fig,axes = plt.subplots(1,2,figsize=(6,3),sharey=True)
ax = axes[0]
pdata[pdata.index<=15].plot(
    ax=ax,kind='bar',stacked=True,width=.95, color=colors,alpha=.7, rot=0)

ax = axes[1]
pdata[pdata.index>15].plot(
    ax=ax,kind='bar',stacked=True, color=colors,width=.95,alpha=.7, rot=0)
ax.get_legend().remove()
ax.set_ylim([0,20])
fig.tight_layout()

但是,生成的图形如下所示,条之间的间距不同:

enter image description here

有没有办法校正间距?另外,是否可以进一步缩小两幅图之间的距离?

1 个答案:

答案 0 :(得分:1)

您看到的是两种效果的组合,@override Widget build(BuildContext context) { return DefaultTabController( length: dateList.length, child: Scaffold( appBar: AppBar( bottom: const PreferredSize( preferredSize: Size.zero, child: TabBar( tabs: <Widget>[ _buildTabs(), ], isScrollable: true, ), ), ), body: TabBarView( children: <Widget>[ _buildSchedule() ], ), ), ); } @override Widget _buildSchedule() { return Container( child: Center( child: StreamBuilder<QuerySnapshot>( stream: Firestore.instance .collection('schedule') .where('time', isEqualTo: _stateDate) .orderBy('date') .snapshots(), builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) { if (!snapshot.hasData) { return const Text('Loading...'); } return ListView.builder( itemCount: snapshot.data.documents.length, itemBuilder: (BuildContext context, int index) => _buildScheduleItem(context, snapshot.data.documents[index]), ); }), ), ); } 属性设置为width,而0.95太低而无法解析空白在酒吧之间。如果您需要一些空格,但是在每个小节之间,则可以按照注释的建议和this answer中的

来简单地增加图形的dpi
dpi

会将图形的fig,axes = plt.subplots(1,2,figsize=(6,3),sharey=True, dpi=300) 设置为dpi并产生类似

300 DPI plot with 0.95 width bars

300创建小节间空格的地方,如果您根本不想在小节之间有空格,只需设置width=0.95即可产生

300 DPI plot with 1.0 width bars

请注意,在两种情况下,我都使用width=1.0而不是plt.subplots_adjust(wspace=0.05),但这是优先考虑的问题。此外,请注意,如果您使用fig.tight_layout(),则无需调整width=1.0属性,因为显示正确:

完整示例

dpi