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

时间:2018-06-28 15:33:59

标签: python-2.7 matplotlib

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

enter image description here

深入研究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()方法正在检索当前字符串,则我不理解它如何具有任何空值刻度配置。

2 个答案:

答案 0 :(得分:4)

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

Could not find module 'Foo'
Perhaps you meant Bar (from bar-0.1.0.0)
Use -v to see a list of the files searched for.

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

Reversed y-axis order

答案 1 :(得分:2)

编辑:

基于Amit的出色答案,如果您要编辑数据而不是刻度格式器,则可以使用以下解决方案:

import matplotlib.pyplot as plt
import numpy as np

y = np.linspace(-3000,-1000,2001)
fig, ax = plt.subplots()
ax.plot(-y)  # invert y-values of the data
ax.invert_yaxis()  # invert the axis so that larger values are displayed at the bottom
plt.show()

enter image description here