作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我长期以来一直使用小子程序来格式化我正在绘制的图表的轴。几个例子:
def format_y_label_thousands(): # format y-axis tick labels formats
ax = plt.gca()
label_format = '{:,.0f}'
ax.set_yticklabels([label_format.format(x) for x in ax.get_yticks().tolist()])
def format_y_label_percent(): # format y-axis tick labels formats
ax = plt.gca()
label_format = '{:.1%}'
ax.set_yticklabels([label_format.format(x) for x in ax.get_yticks().tolist()])
但是,在昨天更新 matplotlib 后,我在调用这两个函数中的任何一个时收到以下警告:
UserWarning: FixedFormatter should only be used together with FixedLocator
ax.set_yticklabels([label_format.format(x) for x in ax.get_yticks().tolist()])
出现这种警告的原因是什么?我无法弄清楚查看 matplotlib 的文档。
最佳答案
解决方法:
避免警告的方法是使用 FixedLocator(它是 matplotlib.ticker 的一部分)。下面我展示了一个绘制三个图表的代码。我以不同的方式格式化他们的轴。请注意,“set_ticks”使警告静音,但它会更改实际的刻度位置/标签(我花了一些时间才发现 FixedLocator 使用相同的信息但保持刻度位置不变)。您可以使用 x/y 来查看每个解决方案如何影响输出。
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.ticker as mticker
mpl.rcParams['font.size'] = 6.5
x = np.array(range(1000, 5000, 500))
y = 37*x
fig, [ax1, ax2, ax3] = plt.subplots(1,3)
ax1.plot(x,y, linewidth=5, color='green')
ax2.plot(x,y, linewidth=5, color='red')
ax3.plot(x,y, linewidth=5, color='blue')
label_format = '{:,.0f}'
# nothing done to ax1 as it is a "control chart."
# fixing yticks with "set_yticks"
ticks_loc = ax2.get_yticks().tolist()
ax2.set_yticks(ax1.get_yticks().tolist())
ax2.set_yticklabels([label_format.format(x) for x in ticks_loc])
# fixing yticks with matplotlib.ticker "FixedLocator"
ticks_loc = ax3.get_yticks().tolist()
ax3.yaxis.set_major_locator(mticker.FixedLocator(ticks_loc))
ax3.set_yticklabels([label_format.format(x) for x in ticks_loc])
# fixing xticks with FixedLocator but also using MaxNLocator to avoid cramped x-labels
ax3.xaxis.set_major_locator(mticker.MaxNLocator(3))
ticks_loc = ax3.get_xticks().tolist()
ax3.xaxis.set_major_locator(mticker.FixedLocator(ticks_loc))
ax3.set_xticklabels([label_format.format(x) for x in ticks_loc])
fig.tight_layout()
plt.show()
输出图表:
conda install matplotlib=3.2.2
并非所有列出的版本都可用。例如,无法安装 matplotlib 3.3.0,尽管它列在 matplotlib 的发布页面:
https://github.com/matplotlib/matplotlib/releases
关于python - 用户警告 : FixedFormatter should only be used together with FixedLocator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63723514/
我长期以来一直使用小子程序来格式化我正在绘制的图表的轴。几个例子: def format_y_label_thousands(): # format y-axis tick labels format
我是一名优秀的程序员,十分优秀!