Как напечатать 10K, 20K .... 1M в xlabel сюжета matplotlib - PullRequest
1 голос
/ 29 января 2020

Привет! Я работаю с RL и хочу составить график вознаграждения за n временных шагов. Предположим, что если у меня будет 1 миллион временных шагов, у меня будет такое же количество вознаграждений. Теперь, когда я рисую это, метка x становится более грязной. Я бы хотел, чтобы xlabel показывал как 10K, 20K до 1M. Как мне это сделать?

, например, у меня есть этот код,

import matplotlib.pyplot as plt
import torch

x = torch.rand(1000000,)
plt.plot(x)
plt.show()

, поэтому при построении этого графика на оси x вы получите 0, 200000, 400000, 600000, 800000, 1000000 Но я хотел бы напечатать его как 20K, 40K, 60K, 80K, 1M

Ответы [ 2 ]

2 голосов
/ 29 января 2020

Вот адаптация пользовательских тиков Джейка ВандерПласа (он пишет кратно π).

from math import log10, floor
from matplotlib import pyplot as plt

def format_func(value, tick_number=None):
    num_thousands = 0 if abs(value) < 1000 else floor (log10(abs(value))/3)
    value = round(value / 1000**num_thousands, 2)
    return f'{value:g}'+' KMGTPEZY'[num_thousands]

fig, ax = plt.subplots()
plt.plot([500, 2_000], [2_200_000, 4_000_000])
ax.xaxis.set_major_formatter(plt.FuncFormatter(format_func))
ax.yaxis.set_major_formatter(plt.FuncFormatter(format_func))
plt.show()

result

1 голос
/ 29 января 2020

Вы можете использовать plt.xticks, например:

plt.xticks([0,200000,400000,600000,800000,1000000], 
           ["0", "200K", "400K", "600K", "800K", "1M"])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...