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])
我的数据存储在sorted_composite里,ind是我用来放置柱子的值(也就是y轴刻度的位置)。我使用linspace来生成均匀间隔的柱子,但这似乎只部分有效,我也不太清楚具体原因。
1 个回答
2
就像用户1127062说的,你的代码可能没问题。
如果你不需要图表是互动的,可以把它保存为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
原始的“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