2012-01-03 148 views
7

我已经生成柱状图看起来像这样的靠不住之间的间距:matplotlib BARH产生酒吧

enter image description here

注意标签上的垂直间距不均匀出于某种原因;我不确定这是否与我已经分配了滴答或任何实际放置文本的机制有关。相关代码:

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

我的数据存储在sorted_composite和IND是我用来放置棒(的ytick位置)的值。我正在使用linspace生成均匀间隔的小节,这是唯一的作品,我不确定原因。

+0

我在想,您的问题可能与具有所有这些酒吧而临时抱佛脚,但我一直在试图从你的代码5到〜50条,这里没有问题。 – 2012-01-03 04:22:01

+0

是的,我有一种感觉这是一个像素放置四舍五入问题..即如果你有一个8像素高的图像,并且想要通过中心绘制一条线,你是否沿着像素行4或像素行5绘制;无论哪种方式很糟糕 – user1127062 2012-01-03 07:34:43

+0

在一个侧面说明我报复一个平凡的测试用例不好的结果: '从numpy的进口*' 从pylab进口* 数据=零(50)+10 IND =人气指数(10) barh(ind,data) show()' 看起来很糟糕 – user1127062 2012-01-03 07:38:15

回答

1

与user1127062一样,可能是因为你的代码很好。

如果您不需要的情节是互动的,它保存为一个SVG

如果你运行:在

data = numpy.random.randn(10000) 
pylab.hist(data,300) 
pylab.savefig(fileName+'.svg',format='svg') 

你会看到像素锯齿(在酒吧宽度)数字窗口,但它已经在svg文件中消失了。

如果svg与您正在做的不兼容,那么“cairo”后端似乎能够最好地保存png文件。它们看起来和svg的截图一样好。

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

import matplotlib 
# you have to change the backend before importing pylab 
matplotlib.use('cairo') 
import pylab 

原始“开罗”不支持show(),所以你不能在交互模式下使用它,或者直接从程序显示一个阴谋。

的“GTKCairo”后端有两全其美的,但在默认安装不启用(至少不是我用sudo apt-get install matplotlib GOT)

如果你正在使用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