如何使用 matplotlib colorbar 中的偏移符号更改尾数的位数
How to change the the number of digits of the mantissa using offset notation in matplotlib colorbar
我在 matplotlib 中有一个等高线图,使用由
创建的颜色条
from mpl_toolkits.axes_grid1 import make_axes_locatable
divider = make_axes_locatable(axe) #adjust colorbar to fig height
cax = divider.append_axes("right", size=size, pad=pad)
cbar = f.colorbar(cf,cax=cax)
cbar.ax.yaxis.set_offset_position('left')
cbar.ax.tick_params(labelsize=17)#28
t = cbar.ax.yaxis.get_offset_text()
t.set_size(15)
如何更改颜色栏刻度标签(指数的尾数)在“.”之后仅显示 2 位数字?而不是 3(保留偏移量表示法)?有没有可能或者我必须手动设置刻度?谢谢
我试过使用 str 格式化程序
cbar.ax.yaxis.set_major_formatter(FormatStrFormatter('%.2g'))
到目前为止,但这并没有给我想要的结果。
问题是,虽然 FormatStrFormatter
允许精确设置格式,但它不能像问题中的 1e-7
那样处理偏移量。
另一方面,默认的 ScalarFormatter
会自动选择自己的格式,无需用户更改。虽然这在大多数情况下是可取的,但在这种情况下,我们希望自己指定格式。
一个解决方案是继承 ScalarFormatter
并重新实现它的 ._set_format()
方法,类似于 .
请注意,您希望 "%.2f"
而不是 "%.2g"
始终显示小数点后 2 位数字。
import numpy as np; np.random.seed(0)
import matplotlib.pyplot as plt
import matplotlib.ticker
class FormatScalarFormatter(matplotlib.ticker.ScalarFormatter):
def __init__(self, fformat="%1.1f", offset=True, mathText=True):
self.fformat = fformat
matplotlib.ticker.ScalarFormatter.__init__(self,useOffset=offset,
useMathText=mathText)
def _set_format(self, vmin, vmax):
self.format = self.fformat
if self._useMathText:
self.format = '$%s$' % matplotlib.ticker._mathdefault(self.format)
z = (np.random.random((10,10))*0.35+0.735)*1.e-7
fig, ax = plt.subplots()
plot = ax.contourf(z, levels=np.linspace(0.735e-7,1.145e-7,10))
fmt = FormatScalarFormatter("%.2f")
cbar = fig.colorbar(plot,format=fmt)
plt.show()
抱歉这么晚才加入循环。如果您还在寻找解决方案,更简单的方法如下。
import matplotlib.ticker as tick
cbar.ax.yaxis.set_major_formatter(tick.FormatStrFormatter('%.2f'))
注意:是“%.2f”而不是“%.2g”。
我在 matplotlib 中有一个等高线图,使用由
创建的颜色条from mpl_toolkits.axes_grid1 import make_axes_locatable
divider = make_axes_locatable(axe) #adjust colorbar to fig height
cax = divider.append_axes("right", size=size, pad=pad)
cbar = f.colorbar(cf,cax=cax)
cbar.ax.yaxis.set_offset_position('left')
cbar.ax.tick_params(labelsize=17)#28
t = cbar.ax.yaxis.get_offset_text()
t.set_size(15)
如何更改颜色栏刻度标签(指数的尾数)在“.”之后仅显示 2 位数字?而不是 3(保留偏移量表示法)?有没有可能或者我必须手动设置刻度?谢谢
我试过使用 str 格式化程序
cbar.ax.yaxis.set_major_formatter(FormatStrFormatter('%.2g'))
到目前为止,但这并没有给我想要的结果。
问题是,虽然 FormatStrFormatter
允许精确设置格式,但它不能像问题中的 1e-7
那样处理偏移量。
另一方面,默认的 ScalarFormatter
会自动选择自己的格式,无需用户更改。虽然这在大多数情况下是可取的,但在这种情况下,我们希望自己指定格式。
一个解决方案是继承 ScalarFormatter
并重新实现它的 ._set_format()
方法,类似于
请注意,您希望 "%.2f"
而不是 "%.2g"
始终显示小数点后 2 位数字。
import numpy as np; np.random.seed(0)
import matplotlib.pyplot as plt
import matplotlib.ticker
class FormatScalarFormatter(matplotlib.ticker.ScalarFormatter):
def __init__(self, fformat="%1.1f", offset=True, mathText=True):
self.fformat = fformat
matplotlib.ticker.ScalarFormatter.__init__(self,useOffset=offset,
useMathText=mathText)
def _set_format(self, vmin, vmax):
self.format = self.fformat
if self._useMathText:
self.format = '$%s$' % matplotlib.ticker._mathdefault(self.format)
z = (np.random.random((10,10))*0.35+0.735)*1.e-7
fig, ax = plt.subplots()
plot = ax.contourf(z, levels=np.linspace(0.735e-7,1.145e-7,10))
fmt = FormatScalarFormatter("%.2f")
cbar = fig.colorbar(plot,format=fmt)
plt.show()
抱歉这么晚才加入循环。如果您还在寻找解决方案,更简单的方法如下。
import matplotlib.ticker as tick
cbar.ax.yaxis.set_major_formatter(tick.FormatStrFormatter('%.2f'))
注意:是“%.2f”而不是“%.2g”。