所有,我正在使用Matplotlib绘制极棒。但是蜱是重叠的。
有人知道如何避免这种情况吗?谢谢!
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 :(得分: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()
生成类似于以下内容的数字:
基本上,您希望使用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()