Изменить обозначение смещения matplotlib с научного на обычный - PullRequest
0 голосов
/ 21 декабря 2018

Я хочу установить для форматирования смещения по оси Y в своем графике ненаучную запись, но я не могу найти параметр, чтобы сделать это.Другие вопросы и способы их решения описывают, как либо полностью удалить смещение, либо установить для y-отметок научную / простую запись;Я не нашел ответа для установки обозначения смещения .

Я уже пробовал использовать эти два параметра, но я думаю, что они предназначены для y-тиков, а не смещения:

ax.ticklabel_format(axis='y', style='plain', useOffset=6378.1)

и

ax.get_yaxis().get_major_formatter().set_scientific(False)

Итак, фактический результат равен +6.3781e3, когда я хочу +6378.1

Любой способ сделатьthis?

Редактировать: Добавлен пример кода и цифры:

#!/usr/bin/env python

from matplotlib import pyplot as plt
from matplotlib import ticker
plt.rcParams['font.family'] = 'monospace'
import random

Date = range(10)
R = [6373.1+10*random.random() for i in range(10)]

fig, ax = plt.subplots(figsize=(9,6))
ax.plot(Date,R,'-D',zorder=2,markersize=3)
ax.ticklabel_format(axis='y', style='plain', useOffset=6378.1)
ax.set_ylabel('Mean R (km)',fontsize='small',labelpad=1)

plt.show()

Example image with data centered around the offset I want

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Вы можете создать подкласс по умолчанию ScalarFormatter и заменить метод get_offset, чтобы он просто возвращал смещение как есть.Обратите внимание, что если вы хотите сделать это совместимым с мультипликативным «смещением», это решение необходимо адаптировать (в настоящее время оно просто печатает предупреждение).

from matplotlib import pyplot as plt
import matplotlib.ticker
import random

class PlainOffsetScalarFormatter(matplotlib.ticker.ScalarFormatter):
    def get_offset(self):
        if len(self.locs) == 0:
            return ''
        if self.orderOfMagnitude:
            print("Your plot will likely be labelled incorrectly")
        return self.offset

Date = range(10)
R = [6373.1+10*random.random() for i in range(10)]

fig, ax = plt.subplots(figsize=(9,6))
ax.plot(Date,R,'-D',zorder=2,markersize=3)

ax.yaxis.set_major_formatter(PlainOffsetScalarFormatter())
ax.ticklabel_format(axis='y', style='plain', useOffset=6378.1)
ax.set_ylabel('Mean R (km)',fontsize='small',labelpad=1)

plt.show()

enter image description here

0 голосов
/ 21 декабря 2018

Один из способов сделать это - отключить сам текст смещения и добавить свой пользовательский ax.text следующим образом:

from matplotlib import pyplot as plt
import random

plt.rcParams['font.family'] = 'monospace'

offset = 6378.1

Date = range(10)
R = [offset+10*random.random() for i in range(10)]

fig, ax = plt.subplots(figsize=(9,6))
ax.plot(Date,R,'-D',zorder=2,markersize=3)
ax.ticklabel_format(axis='y', style='plain', useOffset=offset)
ax.set_ylabel('Mean R (km)',fontsize='small',labelpad=1)

ax.yaxis.offsetText.set_visible(False)
ax.text(x = 0.0, y = 1.01, s = str(offset), transform=ax.transAxes)
plt.show()

enter image description here

...