我正在使用matplotlib.pylot模块生成数千个图形,这些图形都处理一个称为“总垂直深度(TVD)”的值。这些值来自的数据都是负数,但行业标准是将它们显示为正(即距零的距离/绝对值)。我的y轴用于显示数字,并且当然使用实际值(负值)标记轴刻度。我不想更改这些值,但想知道如何访问文本元素并仅从每个值中删除负号(在图像上以红色圆圈显示)。

python-2.7 - 如何从matplotlib.pyplot图的y刻度标签中删除负号?-LMLPHP

深入研究matplotlib文档后,经过几次迭代,使我进入了以下代码,但仍然出现错误。

locs, labels = plt.yticks()

newLabels = []

for lbl in labels:
    newLabels.append((lbl[0], lbl[1], str(float(str(lbl[2])) * -1)))

plt.yticks(locs, newLabels)


看来“标签”列表中的某些字符串为空,因此强制转换无法正常工作,但是如果yticks()方法正在检索当前的滴答配置,则我不理解它如何具有任何空值。

最佳答案

@SiHA指出,如果我们更改数据,则y轴上标签的顺序将颠倒。因此,我们可以使用ticker formatter来更改标签,而无需更改数据,如下例所示:

import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
import numpy as np

@ticker.FuncFormatter
def major_formatter(x, pos):
    label = str(-x) if x < 0 else str(x)
    return label

y = np.linspace(-3000,-1000,2001)
fig, ax = plt.subplots()
ax.plot(y)
ax.yaxis.set_major_formatter(major_formatter)
plt.show()


这给了我以下图,请注意y轴标签的顺序。

python-2.7 - 如何从matplotlib.pyplot图的y刻度标签中删除负号?-LMLPHP

关于python-2.7 - 如何从matplotlib.pyplot图的y刻度标签中删除负号?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51086732/

10-12 18:37
查看更多