在matplotlib中保留多个条形图中的xticks

时间:2015-09-09 14:47:24

标签: python matplotlib

1)我无法在变量x中看到以列表形式存储的基于文本的xticks。当我只有一个基于单列的条形图时,我可以将xticks视为文本而不是更多。

2)如何控制xticks的字体属性和y轴的值?

谢谢。

import matplotlib.pyplot as plt
import pylab as pl
import numpy as np

#load text and columns into different variables
data = np.genfromtxt('a', names=True, dtype=None, usecols=("X", "N2", "J2", "V2", "asd", "xyz"))  
x = data['X'] 
n = data['N2'] 
j = data['J2'] 
v = data['V2'] 

#make x axis string based labels
r=np.arange(1,25,1.5)
plt.xticks(r,x)             #make sure dimension of x and n matches

plt.figure(figsize=(3.2,2), dpi=300, linewidth=3.0)
ax = plt.subplot(111)
ax.bar(r,v,width=0.9,color='red',edgecolor='black', lw=0.5, align='center')
plt.axhline(y=0,linewidth=1.0,color='black')   #horizontal line at y=0
plt.axis([0.5,16.5,-0.4,0.20])

ax.bar(r,j,width=0.6,color='green',edgecolor='black', lw=0.5, align='center')
ax.bar(r,n,width=0.3,color='blue',edgecolor='black', lw=0.5, align='center')

plt.axhline(y=0,linewidth=1,color='black')   #horizontal line at y=0

plt.axis([0.5,24.5,-0.36,0.15])

plt.savefig('fig',dpi=300,format='png',orientation='landscape')

1 个答案:

答案 0 :(得分:3)

您执行此操作的方式,只需在创建您正在处理的数字之后将调用移至plt.xticks(r,x)某处。否则pyplot将为您创建一个新数字。

但是,我还会考虑切换到更明确的object-oriented interfacematplotlib

这样您就可以使用:

fig, ax = plt.subplots(1,1) # your only call to plt

ax.bar(r,v,width=0.9,color='red',edgecolor='black', lw=0.5, align='center')
ax.bar(r,j,width=0.6,color='green',edgecolor='black', lw=0.5, align='center')
ax.bar(r,n,width=0.3,color='blue',edgecolor='black', lw=0.5, align='center')
ax.set_xticks(r)
ax.set_xticklabels(x)
ax.axhline(y=0,linewidth=1,color='black')

fig.savefig('fig',dpi=300,format='png',orientation='landscape')
# or use plt.show() to see the figure interactively or inline, depending on backend
# (see Joe Kington's comment below)