使用matplotlib设置logit刻度轴的标签时,我得到了看起来像标签定位错误的内容,这是我的例子:
import matplotlib.pyplot as plt;
from matplotlib.ticker import FormatStrFormatter;
x = [1,2,3,4,5];
y = [0.1,0.2,0.3,0.4,0.5];
fig,ax = plt.subplots();
ax.set_ylim([0.005,0.99]);
ax.set_yscale('logit');
ax.yaxis.set_minor_formatter(FormatStrFormatter(""));
ax.set_xlabel("X axis");
ax.set_ylabel("Y axis"); #set y axis label (logit scale)
ax.plot(x,y);
plt.show();
plt.close();
这里有追踪:
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/matplotlib/backends/backend_macosx.py", line 136, in _draw
self.figure.draw(renderer)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/matplotlib/artist.py", line 63, in draw_wrapper
draw(artist, renderer, *args, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/matplotlib/figure.py", line 1143, in draw
renderer, self, dsu, self.suppressComposite)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/matplotlib/image.py", line 139, in _draw_list_compositing_images
a.draw(renderer)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/matplotlib/artist.py", line 63, in draw_wrapper
draw(artist, renderer, *args, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/matplotlib/axes/_base.py", line 2409, in draw
mimage._draw_list_compositing_images(renderer, self, dsu)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/matplotlib/image.py", line 139, in _draw_list_compositing_images
a.draw(renderer)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/matplotlib/artist.py", line 63, in draw_wrapper
draw(artist, renderer, *args, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/matplotlib/axis.py", line 1150, in draw
self.label.draw(renderer)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/matplotlib/artist.py", line 63, in draw_wrapper
draw(artist, renderer, *args, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/matplotlib/text.py", line 762, in draw
raise ValueError("posx and posy should be finite values")
ValueError: posx and posy should be finite values
省略
时效果很好ax.set_ylabel("Y axis"); #set y axis label (logit scale)
在轴刻度之前或之后设置标签并不重要。 任何人都知道如何解决这个问题?
答案 0 :(得分:5)
文本标签的设置方式存在错误,导致logit比例的非数字边界框,请参阅this issue on GitHub。
解决方案是添加
ax.spines['left']._adjust_location()
(其中'left'
可以替换为'right'
,'top'
,'bottom'
,具体取决于您感兴趣的轴)。
完整示例:
import matplotlib.pyplot as plt
x = [1,2,3,4,5]
y = [0.05,0.2,0.3,0.4,0.95]
fig,ax = plt.subplots()
ax.set_yscale('logit')
ax.set_xlabel("X axis")
ax.set_ylabel("Y axis")
ax.spines['left']._adjust_location()
ax.plot(x,y)
plt.show()