gpt4 book ai didi

python - Pandas dataframe 绘图栏下降值

转载 作者:太空宇宙 更新时间:2023-11-04 02:10:30 27 4
gpt4 key购买 nike

在进行数据分析时,我使用 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 转置,以便 plot.bar 在 X 轴上绘制天数。

figsize=(10, 5)

figsize(10, 5)

图大小(15, 5)

figsize(15, 5)

最佳答案

作为估计:您有 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

关于python - Pandas dataframe 绘图栏下降值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53817975/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com