下面是生成带有内联标签的等高线图的示例代码。我想知道如何编辑内联标签。
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-10, 10, 100)
y = np.linspace(-10, 10, 100)
def z_func(x, y):
""" z = z(x,y) ==> Z = Z(X, Y) """
X, Y = np.meshgrid(x, y)
Z = np.sqrt(X**2 + Y**2)
return X, Y, Z
def get_xyz_contour_plot(X, Y, Z, cmap='plasma', ncontours=6, linecolor='white'):
""" Generates a filled contour plot with inline labels """
plt.contourf(X, Y, Z, cmap=cmap)
contours = plt.contour(X, Y, Z, ncontours, colors=linecolor)
plt.clabel(contours, inline=True, fontsize=8)
plt.show()
X, Y, Z = z_func(x, y)
get_xyz_contour_plot(X, Y, Z)
上面的代码生成了一个看起来像这样的图。如果我想在内联标签中添加一个负号,我可以在上面的例子中应用一个负号。但出于我的实际目的,我正在制作与卡方值相关的 pvalue 的等高线图。代码太长,无法在此处发布(因此是上面的替代示例),但我最小化了与卡方相关的负 pvalue 而不是卡方本身(通过 scipy)。因此,我的函数产生负输出,内联标签显示负号。
是否可以在生成内联标签值后通过删除负号来编辑内联标签?例如,如何在不更改 的情况下向上述代码中的内联标签添加负号z_func
?
您可以指定 afmt
到clabel
,它可能是一个 matplotlib 格式化程序实例。您可以将 aFuncFormatter
与函数一起使用,它只是在格式化之前反转值的符号。
fmt_func = lambda x,pos: "{:1.3f}".format(-x)
fmt = matplotlib.ticker.FuncFormatter(fmt_func)
plt.clabel(contours, inline=True, fontsize=8, fmt=fmt)
完整示例:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker
x = np.linspace(-10, 10, 100)
y = np.linspace(-10, 10, 100)
def z_func(x, y):
""" z = z(x,y) ==> Z = Z(X, Y) """
X, Y = np.meshgrid(x, y)
Z = np.sqrt(X**2 + Y**2)
return X, Y, Z
def get_xyz_contour_plot(X, Y, Z, cmap='plasma', ncontours=6, linecolor='white'):
""" Generates a filled contour plot with inline labels """
plt.contourf(X, Y, Z, cmap=cmap)
contours = plt.contour(X, Y, Z, ncontours, colors=linecolor)
fmt_func = lambda x,pos: "{:1.3f}".format(-x)
fmt = matplotlib.ticker.FuncFormatter(fmt_func)
plt.clabel(contours, inline=True, fontsize=8, fmt=fmt)
plt.show()
X, Y, Z = z_func(x, y)
get_xyz_contour_plot(X, Y, Z)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句