不规则间距的条形图

问题描述 投票:0回答:1

我使用条形图来绘制查询频率,但我始终看到条形之间的间距不均匀。这些看起来应该与蜱有关,但它们处于不同的位置

这会出现在更大的图中

还有更小的


def TestPlotByFrequency (df, f_field, freq, description):
    import matplotlib.pyplot as plt

    fig, ax = plt.subplots()
    ax.bar(df[f_field][0:freq].index,\
           df[f_field][0:freq].values)


    plt.show()

这也与数据无关,顶部没有相同的频率计数

    count
0   8266
1   6603
2   5829
3   4559
4   4295
5   4244
6   3889
7   3827
8   3769
9   3673
10  3606
11  3479
12  3086
13  2995
14  2945
15  2880
16  2847
17  2825
18  2719
19  2631
20  2620
21  2612
22  2590
23  2583
24  2569
25  2503
26  2430
27  2287
28  2280
29  2234
30  2138

有什么办法可以让这些保持一致吗?

python matplotlib bar-chart antialiasing
1个回答
6
投票

问题与锯齿有关,因为条形太细而无法真正分开。根据条形开始处的子像素值,空白区域是否可见。绘图的 dpi 可以为显示的图形或保存图像时设置。但是,如果条形太多,增加 dpi 只会有一点帮助。

按照这篇文章中的建议,您还可以将图像保存为 svg 以获得矢量格式。根据您想在哪里使用它,它可以完美呈现。

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

matplotlib.rcParams['figure.dpi'] = 300

t = np.linspace(0.0, 2.0, 50)
s = 1 + np.sin(2 * np.pi * t)

df = pd.DataFrame({'time': t, 'voltage': s})

fig, ax = plt.subplots()
ax.bar(df['time'], df['voltage'], width = t[1]*.95)

plt.savefig("test.png", dpi=300)
plt.show()

100 dpi 的图像:

300 dpi 的图像:

© www.soinside.com 2019 - 2024. All rights reserved.