matplotlib barh在条形之间产生不稳定的间距

use*_*062 7 python matplotlib

我一直在生成看起来像这样的条形图:

在此输入图像描述

请注意,由于某种原因,标签上的垂直间距不均匀; 我不确定这是否与我如何分配刻度或实际放置文本的任何机制有关.相关代码:

height_factor = 40.0
ind = np.linspace(0,len(sorted_totals)*height_factor,num=len(sorted_totals))
width = 0.25
fig = plt.figure(figsize=(15.5, 8.75),dpi=300)
p1 = plt.barh(ind,map(int,sorted_composite[:,0]),color='blue',align='center',height=height_factor)
p1 = plt.barh(ind,map(int,sorted_composite[:,2]),color=(0.75,0.1,0.1),align='center',height=height_factor)
plt.ylabel('# of Picks (blue) + # of Bans (red)')
plt.yticks(ind, sorted_totals[:,0])
plt.subplots_adjust(bottom=0.05, left=0.14,right=0.95,top=0.95)
plt.ylim([ind.min() - height_factor, ind.max() + height_factor])
Run Code Online (Sandbox Code Playgroud)

我的数据存储在sorted_composite中,而ind是我用来放置条形的值(ytick位置).我正在使用linspace来生成均匀间隔的条形图,这只是一种工作,我不确定为什么.

mda*_*ust 2

就像 user1127062 所建议的那样,您的代码可能没问题。

如果您不需要绘图具有交互性,请将其另存为 svg

如果你运行:

data = numpy.random.randn(10000)
pylab.hist(data,300)
pylab.savefig(fileName+'.svg',format='svg')
Run Code Online (Sandbox Code Playgroud)

您将在图形窗口中看到像素锯齿(在条形宽度中),但它在 svg 文件中消失了。

如果 svg 与您正在做的事情不兼容,“cairo”后端似乎在保存 png 文件方面做得最好。它们看起来和 svg 的屏幕截图一样好。

您可以通过运行来切换后端。

import matplotlib
# you have to change the backend before importing pylab
matplotlib.use('cairo') 
import pylab
Run Code Online (Sandbox Code Playgroud)

raw "cairo" 不支持show(),因此您不能在交互模式下使用它,也不能直接从程序显示绘图。

“GTKCairo”后端具有两全其美的优点,但在默认安装中未启用(至少在我安装的后端中未启用sudo apt-get install matplotlib

如果你使用的是 Ubuntu,我认为你需要做的就是安装 gtk,并重新编译 matplotlib:

sudo apt-get install git-core python-gtk2-dev
git clone git://github.com/matplotlib/matplotlib.git
cd matplotlib
sudo python setup.py install
Run Code Online (Sandbox Code Playgroud)

您可以通过以下方式检查哪个后端处于活动状态:

matplotlib.get_backend()
Run Code Online (Sandbox Code Playgroud)

您可以通过搜索您的matplotlibrc文件来自动加载您最喜欢的后端,我在以下位置找到了我的文件:

/usr/local/lib/python2.7/dist-packages/matplotlib/mpl-data/matplotlibrc
Run Code Online (Sandbox Code Playgroud)