熊猫数据框绘图栏下降值

时间:2018-12-17 15:11:04

标签: python pandas dataframe matplotlib plot

在进行数据分析时,我使用pandas Dataframe的df.plot.bar方法绘制结果:

df.plot.bar(figsize=(15, 5), legend=None)

在进行更多研究时,我注意到在某些情况下这些图看起来有所不同。原因是,当figsize太小时,plot.bar方法开始忽略信息。

我的示例中每个事件有31个小节,在figsize=(10, 5)处绘制的小节比在figsize(15, 5)中少。 这是已知的和期望的行为吗?因为在没有警告的情况下,情节错过了(重要的)信息。

数据框:

                 Day(X-Axis in plot)
+------------+-----------------------+
| Id    +  Day1  |   Day2  |   Day3  ...
+------------+-----------------------+
| 0     + 0      |   20    |    0
| 1     | 300    |   10    |    400
| 3     + 20     |   0     |    400
| 4     | 60     |   0     |    800
...
+------------+-----------------------+

值是在特定日期特定ID的填充。

每个id每天都有自己的栏。数据框会与T换位,以绘制图。条形图在X轴上绘制日期。

figsize=(10, 5)

figsize(10, 5)

figsize(15, 5)

figsize(15, 5)

1 个答案:

答案 0 :(得分:2)

作为一个估计:您有12行31列。酒吧占据了单位面积的80%。该条至少应有两个像素宽才能在屏幕上看到。通常的数字在轴的两侧都有10%的边距,并且具有100 dpi。然后您需要2 * 12 * 31 / 0.8 ** 2/100〜= 12英寸的图形宽度。换句话说,如果您有超过31列,则在12英寸宽的图形上可能看不到一些条形图。

为使此结果可重复,让我们考虑以下情况,其中有N=20行和列。

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

N=20
df = pd.DataFrame(np.diag(np.ones(N)))

ax = df.plot.bar(legend=False)

plt.show()

enter image description here

有些栏不可见。我们可以计算出,对于20行20列,图形的宽度需要为2*N**2/0.8**2/100. == 12.5英寸。

N=20
df = pd.DataFrame(np.diag(np.ones(N)))

w = 2*N**2/0.8**2/100.
plt.rcParams.update({"figure.figsize" : (w, 4.8), "figure.dpi" : 100})
ax = df.plot.bar(legend=False)

现在它确实显示了所有条形图。

enter image description here

当然不能将图形任意大,因此可以确保横条具有边缘线,该边缘线的绘制与矩形的范围无关。

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

N=20
df = pd.DataFrame(np.diag(np.ones(N)))

ax = df.plot.bar(legend=False)
for bar in ax.patches:
    bar.set_linewidth(0.72)
    bar.set_edgecolor(bar.get_facecolor())
plt.show()

enter image description here