如何使用matplotlib创建一个可理解的条形图超过100个值?

时间:2014-12-01 13:50:45

标签: python pdf matplotlib charts

我有一个带有aproximatey 125行和两列的csv文件 - 用户名和表数。我正在尝试使用matplotlib从这些数据创建水平条形图。我的目标是将条形图导出为pdf文件。问题是我无法在pdf文件中扩展我的图表,因此它实际上是可以理解的。

这是我的代码到目前为止(其中值是具有表/用户数的数组,而标签是具有相应用户名的数组):

positions = np.arange(len(values)) + 0.5
plt.figure(num=None, figsize=(8, 6))
plt.barh(positions, values, align='center', color=colors)
plt.yticks(positions, labels)
plt.tick_params(axis='y', labelsize=8)
plt.xlabel('Nombre tables')
plt.title('Utilisateur')
plt.grid(True)
plt.savefig('foo.pdf', papertype='a2')

这是我用上面代码得到的结果:

Result from matplotlib

我故意水平创建图表,以便它可以在我的pdf中分成多个页面,但我似乎无法使其工作。整个图像在一个页面中呈现,因此变得不可读。任何帮助将不胜感激。


可复制的例子:

values=np.random.randint(0,100,(125,))
labels=[str(x) for x in values]
positions = np.arange(len(values)) + 0.5
plt.figure(num=None, figsize=(8, 6))
plt.barh(positions, values, align='center')
plt.yticks(positions, labels)
plt.tick_params(axis='y', labelsize=8)
plt.xlabel('Nombre tables')
plt.title('Utilisateur')
plt.grid(True)
plt.savefig('foo.pdf', papertype='a2')

1 个答案:

答案 0 :(得分:0)

下面的例子使用Kirubaharan J的想法为figsize设置一个bigget值。只有垂直网格。水平网格似乎没有任何优势。

from matplotlib import pyplot as plt
import numpy as np

values = np.random.randint(0, 100, (125, ))
labels = [str(x) for x in values]
positions = np.arange(len(values)) + 0.5
plt.figure(num=None, figsize=(24, 17))
plt.barh(positions, values, align='center')
plt.yticks(positions, labels)
plt.tick_params(axis='y', labelsize=8)
plt.xlabel('Nombre tables')
plt.title('Utilisateur')
ax = plt.axes()
ax.xaxis.grid(True)
plt.savefig('foo.pdf', papertype='a2')