Matplotlib颜色栏标记Mathtext格式

Matplotlib颜色栏标记Mathtext格式,matplotlib,plot,format,Matplotlib,Plot,Format,标题不言自明,无法找到如何实现它。对于axis ticks format,类似命令如下所示:ax.ticklabel\u format(useMathText=True),此命令没有问题,它可以工作。但是为了使颜色条的记号以MathText格式显示,我找不到如何实现它。我曾尝试将useMathText=True作为参数传递到cbar.ax.tick_params()和cbar=plt.colorbar(),但没有成功 要重新创建: import numpy as np import matplo

标题不言自明,无法找到如何实现它。对于axis ticks format,类似命令如下所示:
ax.ticklabel\u format(useMathText=True)
,此命令没有问题,它可以工作。但是为了使颜色条的记号以MathText格式显示,我找不到如何实现它。我曾尝试将
useMathText=True
作为参数传递到
cbar.ax.tick_params()
cbar=plt.colorbar()
,但没有成功

要重新创建:

import numpy as np
import matplotlib.tri as mtri
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import make_axes_locatable

p = np.array([[0, 0], [1, 0], [1, 1], [0, 1], [0.5, 0.5]])
e = np.array([[0, 1, 4], [3, 0, 4], [1, 2, 4], [2, 3, 4]])
t = mtri.Triangulation(p[:, 0], p[:, 1], e)
z = np.random.rand(5)

fig, ax = plt.subplots()
divider = make_axes_locatable(ax)
cax = divider.append_axes("right", size="5%", pad=0.05)
ax.set_aspect('equal', 'box')
ax.set(xlim=(min(p[:, 0]), max(p[:, 0])), ylim=(min(p[:, 1]), max(p[:, 1])))
c = ax.tricontourf(t, z, 10, cmap='plasma', vmin=np.min(z), vmax=np.max(z),
                   levels=np.linspace(np.min(z), np.max(z), 100))
ax.triplot(t, color='white', lw=0.1)
ax.set_title('Title', fontsize=16)
cbar = plt.colorbar(c, cax=cax, format='%.0e', ticks=np.linspace(np.min(z), np.max(z), 3))
cbar.set_label('Colorbar title', fontsize=16)
# cbar.ax.ticklabel_format(useMathText=True)
ax.ticklabel_format(useMathText=True)
plt.show()

正如Ernest在评论中所解释的,等高线的颜色栏会得到一个
FixedFormatter
,它不接受
useMathText
。在我的版本中,代码没有给出错误,但正如您所指出的,也没有生成所需的输出

因此,答案是将格式化程序更改为ScalarFormatter,同时告诉它使用数学文本。垂直色条的格式化程序可以通过
cbar.ax.yaxis.set\u major\u formatter
设置

从matplotlib导入pyplot作为plt
从matplotlib导入代码
将numpy作为np导入
plt.tricontourf(np.随机.均匀(1,10100),np.随机.均匀(1,10100),np.随机.均匀(1e-6100))
cbar=plt.colorbar()
cbar.ax.yaxis.set\u major\u格式化程序(ticker.ScalarFormatter(useMathText=True))
plt.show()


请让我知道它现在是否适合你。(我的系统现在在Windows下使用matplotlib 3.2.1和Pycharm 2019.3.4。)

正如Ernest在评论中解释的那样,轮廓的颜色栏获得了一个
固定格式设置程序
,它不接受
useMathText
。在我的版本中,代码没有给出错误,但正如您所指出的,也没有生成所需的输出

因此,答案是将格式化程序更改为ScalarFormatter,同时告诉它使用数学文本。垂直色条的格式化程序可以通过
cbar.ax.yaxis.set\u major\u formatter
设置

从matplotlib导入pyplot作为plt
从matplotlib导入代码
将numpy作为np导入
plt.tricontourf(np.随机.均匀(1,10100),np.随机.均匀(1,10100),np.随机.均匀(1e-6100))
cbar=plt.colorbar()
cbar.ax.yaxis.set\u major\u格式化程序(ticker.ScalarFormatter(useMathText=True))
plt.show()


请让我知道它现在是否适合你。(我的系统,现在在Windows下使用matplotlib 3.2.1、Pycharm 2019.3.4。)

@JohanC是,一系列属性错误。@JohanC是,一系列属性错误。已检查版本。我试过你的例子,效果很好。与我的案例不同的是,我使用
ax.tricontourf()
来绘制数据,
cbar=plt.colorbar()
类似,但是
cbar.ax.ticklabel\u格式(useMathText=True)
在我的案例中会导致错误。我会发布我的一段代码。我没有投反对票,但用问题回答问题肯定是非常糟糕的风格。我猜它只是告诉你这个问题不够清楚,根本不应该被回答。关于实际问题,请考虑<代码> TigkLabelyFrad(UsMaScript=true)< /> >只适用于具有<代码> UsMeScript文本>代码>的格式化程序;默认情况下,轮廓颜色栏使用固定的格式设置程序。下一票由我决定。原因是,在尝试了3.1.2和3.2.0中的代码后,我得到了一个异常:
AttributeError:“FixedFormatter”对象在
axis.major.formatter.set_useMathText(useMathText)
中的
行中没有属性“set\u useMathText”
。还有一条消息
AttributeError:此方法仅适用于ScalarFormatter
,可追溯到
cbar.ax.ticklabel\u格式(useMathText=True)
,可能是因为Ernest评论中概述的原因。我认为“无法复制”的答案是有用的,但只有当所有细节(操作系统等)都被忽略时才有用如果你要更新你的答案,包括你是如何执行代码和你的操作系统,这样在确定为什么它对你来说是有效的,而不是OP和我自己更有用的时候,我肯定会考虑删除我的投票。@ JohanC,但是在这个例子中,我觉得MthTeX不起作用。它应该以10^-5的格式显示数字,而不是1e-5。检查版本。我试过你的例子,效果很好。与我的案例不同的是,我使用
ax.tricontourf()
来绘制数据,
cbar=plt.colorbar()
类似,但是
cbar.ax.ticklabel\u格式(useMathText=True)
在我的案例中会导致错误。我会发布我的一段代码。我没有投反对票,但用问题回答问题肯定是非常糟糕的风格。我猜它只是告诉你这个问题不够清楚,根本不应该被回答。关于实际问题,请考虑<代码> TigkLabelyFrad(UsMaScript=true)< /> >只适用于具有<代码> UsMeScript文本>代码>的格式化程序;默认情况下,轮廓颜色栏使用固定的格式设置程序。下一票由我决定。原因是,在尝试了3.1.2和3.2.0中的代码后,我得到了一个异常:
AttributeError:“FixedFormatter”对象在
axis.major.formatter.set_useMathText(useMathText)
中的
行中没有属性“set\u useMathText”
。还有一条消息
AttributeError:此方法仅适用于ScalarFormatter
,可追溯到
cbar.ax.ticklabel\u格式(useMathText=True)
,可能是因为Ernest评论中概述的原因。我认为“无法复制”的答案是有用的,但只有当所有细节(操作系统等)都被忽略时才有用如果你要更新你的答案,包括你是如何执行代码和你的操作系统,这样在确定为什么它对你有效,而不是OP和我自己更有用,我肯定会考虑删除我的下注。@ JohanC,但在这个例子中,我看不到MathT正文。