<p>我想我明白了。您希望右轴从0到100%,并且是对数刻度。我想这应该能奏效。在</p>
<pre><code>totNEA2014 = 1266
def to_percent(y, position):
# Ignore the passed in position. This has the effect of scaling the default
# tick locations.
s = str(100 * y)
if matplotlib.rcParams['text.usetex'] == True:
return s + r'$\%$'
else:
return s + '%'
# Plot Details
bar_width = 0.18
line_width = 1
opacity = 1.
centre_bar_positions = arange(20)
zeros = [0 for k in range(len(centre_bar_positions))]
# Make bar plots
fig = plt.figure(figsize=[12, 9])
ax1 = fig.add_subplot(111)
bar_60_22 = plt.bar(centre_bar_positions, twentytwo[60.0], bar_width, bottom=10**-1, alpha=opacity, color='green', log=True, label='V < 22')
plt.title("Some Place")
plt.ylabel("Number of NEAs")
plt.xlabel("Number of apparitions")
ax1.set_ylim([ax1.set_ylim()[0], totNEA2014])
ax1.set_yscale("log")
plt.legend(loc='best')
ax2 = ax1.twinx()
ax2.yaxis.set_label_position("right")
ax2.set_yscale("log")
ax1.bar(centre_bar_positions, zeros, bar_width, bottom=10**-1, color='white', edgecolor='grey', linewidth=line_width, hatch='0', log=True)
ax2.set_ylim([0.0001, 1])
ax2.set_yticks([0.0001, 0.001, 0.01, 0.1, 1.])
formatter = FuncFormatter(to_percent)
ax2.get_yaxis().set_major_formatter(formatter)
plt.ylabel("Percentage of NEAs discovered in 2014")
plt.xlim([.6, 5.8])
plt.show()
</code></pre>
<p>请注意,我更改了格式化程序函数和打印线(现在只打印到ax1,而不是两个轴)</p>