2013-11-15 13 views
2

所有,我使用Matplotlib来绘制一个polarbar。但是蜱虫是重叠的。如何在Python中为xticklabels添加空间?

有谁知道如何避免这种情况?谢谢!

from pylab  import * 

import matplotlib.pyplot as plt 
from cf.plot import BoundaryNorm,getBoundCmap 
from matplotlib import colors 

fig  = figure(figsize=(8,8)) 
ax  = fig.add_axes([0.1, 0.1, 0.8, 0.8], polar=True) 

N = 8 
theta = np.arange(0.0, 2*np.pi, 2*np.pi/N) 
radii = ones((1,N)).squeeze() 
width = 2*np.pi/N 
bars = ax.bar(theta, radii, width=width, bottom=0.6) 

listBnd = [0,3,6,9,12,15,18,21,24] 

mcolors = plt.cm.Spectral(linspace(0,1,N)) 
cmap = colors.ListedColormap(mcolors) 

for r,bar in zip(arange(1,N+1), bars): 
    bar.set_facecolor(cmap(r-1)) 

xlabels = array([0,21,18,15,12,9,6,3]) 
ax.xaxis.labelpad=50 
ax.set_xticks(theta) 
ax.set_xticklabels(xlabels,rotation=270,fontsize='60') 
ax.xaxis.set_label_coords(0.5,-0.5) 
ax.set_yticklabels([]) 
grid([]) 

show() 

回答

0

首先,让我们来收拾你的代码位。你有很多事情没有道理。 (例如,为什么要从颜色映射生成颜色列表,然后创建另一个颜色映射,然后从其他颜色映射获取最初生成的颜色?)

另外,您设置了很多参数,做你认为他们做的事。 (例如,labelpad一个轴控制的轴标签的填充(如xlabel),而不是蜱)

考虑到这一点,你的代码可能是这个样子:

import numpy as np 
import matplotlib.pyplot as plt 

fig = plt.figure(figsize=(8,8)) 
ax = fig.add_subplot(111, projection='polar') 

N = 8 
theta = np.arange(0.0, 2*np.pi, 2*np.pi/N) 
radii = np.ones(N) 
width = 2 * np.pi/N 
bars = ax.bar(theta, radii, width=width, bottom=0.6) 

colors = plt.cm.Spectral(np.linspace(0, 1, N)) 

for color, bar in zip(colors, bars): 
    bar.set_facecolor(color) 

xlabels = np.array([0,21,18,15,12,9,6,3]) 
ax.set_xticks(theta) 
ax.set_xticklabels(xlabels, rotation=270, fontsize=60) 

ax.set_yticklabels([]) 
ax.grid(False) 

plt.show() 

产生类似如下的图:

enter image description here


基本上,你要使用frac kwarg改为ax.set_thetagrids以改变theta刻度标签的径向位置。 (这有点隐藏,但它是最简单的方法)

此外,我使用fig.tight_layout来调整事物大小,以便刻度标签不会超出图形边界。

import numpy as np 
import matplotlib.pyplot as plt 

fig = plt.figure(figsize=(8,8)) 
ax = fig.add_subplot(111, projection='polar') 

N = 8 
theta = np.arange(0.0, 2*np.pi, 2*np.pi/N) 
radii = np.ones(N) 
width = 2 * np.pi/N 
bars = ax.bar(theta, radii, width=width, bottom=0.6) 

colors = plt.cm.Spectral(np.linspace(0, 1, N)) 

for color, bar in zip(colors, bars): 
    bar.set_facecolor(color) 

xlabels = np.array([0,21,18,15,12,9,6,3]) 
ax.set_thetagrids(np.degrees(theta), xlabels, frac=1.2, 
        rotation=270, fontsize=60) 

ax.set_yticklabels([]) 
ax.grid(False) 

fig.tight_layout() 

plt.show() 

enter image description here

+0

乔,你好,非常感谢你对你很大的帮助! – hexg07

相关问题