如何处理熊猫条形图中恼人的间隙

Posted

技术标签:

【中文标题】如何处理熊猫条形图中恼人的间隙【英文标题】:How to deal with annoying gap in pandas bar plot 【发布时间】:2017-07-07 15:23:11 【问题描述】:

我想在下面的条形图中修正 2012 年和 2013 年之间的差距。

我的数据框是

In [30]: df
Out[30]:
            Pre-Release  Post-Release
FinishDate
2008                1.0           0.0
2009               18.0           0.0
2010               96.0           0.0
2011              161.0           0.0
2012              157.0           0.0
2013                0.0         139.0
2014                0.0         155.0
2015                0.0         150.0
2016                0.0          91.0
2017                0.0          15.0

我正在使用df.plot(kind='bar', width=1) 进行绘图。

【问题讨论】:

align='center'?? 感谢您的猜测,但这并没有消除差距。 差距是一个“合法”差距,因为您同时绘制了两个变量。将零更改为 10.0,您会看到发生了什么(它并排绘制前后)。 【参考方案1】:

您的图表中没有实际的“差距”:Pandas 只是保留空间来绘制两个相邻的不同条形。拿这段代码来说明:

from io import StringIO
import pandas as pd
TESTDATA=StringIO("""2008                1.0           0.0
2009               18.0           5.0
2010               96.0           0.0
2011              161.0           0.0
2012              157.0           0.0
2013                0.0         139.0
2014                0.0         155.0
2015                0.0         150.0
2016                0.0          91.0
2017                0.0          15.0""")
df=pd.read_csv(TESTDATA,delim_whitespace=True,index_col=0)
df.plot(kind='bar')

但您实际上不需要打印两个相邻的条,因此您可以将两个系列绘制到同一个图中,而不是绘制数据框:

ax=df['1.0'].plot(kind='bar')
df['0.0'].plot(kind='bar',ax=ax,color='orange')

或者只使用:

df.plot(kind='bar', stacked=True)

在这种情况下,这会为您提供相同的结果。

【讨论】:

【参考方案2】:

您每年绘制两个数据集。因此,在 x 轴上的每个节点处,绘制了两个数据集的两个条形图。您看不到它们,因为值为零。我认为关键字stacked=True可能有效。这会垂直堆叠两个数据集,并且不会显示任何间隙。

【讨论】:

【参考方案3】:

实际上,当您在此处有效地绘制 两个 直方图时,差距通常是您想要的行为。

然而,在这种情况下,报告的值似乎是排他性的,因此无需并排绘制直方图,只需绘制一个然后绘制另一个。

这是一个可以帮助您实现目标的最小示例:

import matplotlib.pyplot as plt
import numpy as np
import pandas

someDF = pandas.DataFrame('1':np.random.uniform(size=20)*10, '2':np.random.uniform(size=20)*10)

cut = 10
fig, ax = plt.subplots(figsize=(8,3))

first = someDF['1'][someDF.index >= cut]
second = someDF['2'][someDF.index < cut]

ax.bar(left=first.index, height=first, align='center', color='blue')
ax.bar(left=second.index, height=second, align='center', color='red')
plt.show()

输出看起来像:

【讨论】:

以上是关于如何处理熊猫条形图中恼人的间隙的主要内容,如果未能解决你的问题,请参考以下文章

减少 svg 图中条形之间的间隙

熊猫条形图中的刻度标签重叠

熊猫条形图中的刻度标签重叠

熊猫计算唯一值并更改为百分比并放入绘图条形图中

D3 - 如何处理 JSON 数据结构?

spss如何删除堆积条形图中的某块数据