在Matplotlib中使用.format()和StrMethodFormatter?

fdbelqdn  于 2023-06-30  发布在  其他
关注(0)|答案(1)|浏览(134)

这个方法的作用是:

for ax in fig.axes:
    ax.xaxis.set_major_formatter(StrMethodFormatter("{x:,.3f}"))

这将返回KeyError:'X':

for ax in fig.axes:
        ax.xaxis.set_major_formatter(StrMethodFormatter("{x:,.{}f}".format(3)))

我想设置我的标签中的小数位数,但不想硬编码多少。
我的方法受到了这个answer的启发。
尝试更新:
这也适用于:

`ax.xaxis.set_major_formatter(StrMethodFormatter('{}'.format('{x:,.0f}'))) # No decimal places`

但这并不令人困惑:

ax.xaxis.set_major_formatter(StrMethodFormatter('{}'.format('{x:,.{}f}'.format('0') ) ) )

这也是令人困惑的:

x = '{x:,.{}f}'.format(str(0))
ax.xaxis.set_major_formatter(StrMethodFormatter('{}'.format(x) ))

尝试了这个“只是因为”,它没有工作:

ax.xaxis.set_major_formatter(StrMethodFormatter('{}'.format('{x:,{}}'.format('.0f') ) ) )

谢谢你帮助我。

8fsztsew

8fsztsew1#

这里的问题是.format寻找花括号进行替换。因为你在所有东西周围都有花括号,所以它会变得混乱。如果你想在格式字符串中有花括号,那么你需要将它们加倍。通过这种更改,x可以留在字符串中,并将被.format忽略。为了达到你想要的效果,你应该:

precision = 3
for ax in fig.axes:
    ax.xaxis.set_major_formatter(StrMethodFormatter("{{x:,.{}f}}".format(precision)))

如果你使用的是Python 3.6+,那么我更喜欢使用f-strings。同样,您需要将不属于替换部分的花括号加倍。

precision = 3
for ax in fig.axes:
    ax.xaxis.set_major_formatter(StrMethodFormatter(f"{{x:,.{precision}f}}"))

你也可以将格式保存到一个变量中,因为你将在每个循环中使用它。

precision = 3
formatting = f"{{x:,.{precision}f}}"
for ax in fig.axes:
    ax.xaxis.set_major_formatter(StrMethodFormatter(formatting))

相关问题