Как я могу убрать отрицательный знак с метки y в метке matplotlib.pyplot? - PullRequest
0 голосов
/ 28 июня 2018

Я использую модуль 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 голосов
/ 28 июня 2018

@ SiHA указывает, что если мы изменим данные, порядок меток на оси Y будет обратным. Таким образом, мы можем использовать форматер тикера , чтобы просто изменить метки без изменения данных, как показано в примере ниже:

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.

Reversed y-axis order

0 голосов
/ 28 июня 2018

Изменить:

на основе отличного ответа Амита, вот решение, если вы хотите редактировать данные вместо средства форматирования тиков:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...