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

Python matplotlib barh在条之间产生不稳定的间距,python,matplotlib,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

我一直在生成这样的条形图:

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

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])

我的数据存储在排序的组合中,ind是我用来放置条(ytick位置)的值。我正在使用linspace制作等间距的酒吧,这是唯一一种工作,我不知道确切的原因

正如user1127062所建议的,您的代码可能很好

如果不需要绘图是交互式的,请将其另存为svg

如果您运行:

data = numpy.random.randn(10000)
pylab.hist(data,300)
pylab.savefig(fileName+'.svg',format='svg')
您将在figure窗口中看到像素锯齿(在条形图宽度中),但它已在svg文件中消失

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

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

import matplotlib
# you have to change the backend before importing pylab
matplotlib.use('cairo') 
import pylab
原始“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
您可以通过以下方式检查哪个后端处于活动状态:

matplotlib.get_backend()
通过查找
matplotlibrc
文件,您可以自动加载喜爱的后端,我在以下位置找到了我的文件:

/usr/local/lib/python2.7/dist-packages/matplotlib/mpl-data/matplotlibrc

我想你的问题可能与那些条的填充有关,但我一直在尝试你的代码从5条到50条,这里没有问题。是的,我感觉这是一个像素位置取整的问题。。也就是说,如果你有一个8像素高的图像,并想画一条线通过中心,你画它沿着像素行4或像素行5;无论哪种方式看起来都不好注意,即使是一个微不足道的测试用例,我也会得到不好的结果:
from numpy import*
from pylab import*data=zeros(50)+10 ind=arange(10)barh(ind,data)show()`看起来很糟糕matplotlib的版本?也许你打错了,但是:?对不起,是的,那是个打字错误。。这是从
条(arange(50),zero(50)+1)输出的样本:它几乎不能很好地分隔它们。至于版本:python-2.7.2(windows上为32)、mpl-1.1.0、numpy-1.6.1