Масштабирование / отображение Matplotlib по оси Y

#python #matplotlib

#python #matplotlib

Вопрос:

Я очень новичок в Python / наборах данных. Я не уверен в терминологии, которую следует использовать при описании моего вопроса. В результате было сложно искать ответы. Я построил набор данных в диапазоне от 0 до 20 000 000 000 000 для оси y. Вот что у меня есть:

введите описание изображения здесь

Однако для моего задания это должно выглядеть так:

введите описание изображения здесь

Я попробовал ticklabel_format(style= ‘plain’, axis =’y’), что дает мне:

введите описание изображения здесь

Это дает мне числа без научных обозначений и слишком много нулей! Я не уверен, какие методы я должен использовать для масштабирования (?) чисел. Я думал о том, чтобы работать с моими необработанными значениями данных, но это кажется неправильным. Я просмотрел документацию для matplotlib.pyplot.yscale, но если я чего-то не хватает, это, похоже, не то, что мне нужно. Любая помощь приветствуется. Спасибо.

Комментарии:

1. Позволяет ли назначение масштабировать необработанный набор данных перед построением графика в matplotlib? Вы можете использовать numpy для преобразования ваших данных по оси y в массив numpy, а затем разделить на 1E9, что позволит соответствующим образом масштабировать все элементы зависимой переменной (а затем указать масштабирование в метке оси y)

2. У меня есть три списка, каждый из которых содержит 57 элементов / значений. Я строю каждый из них отдельно — plt.plot(ось x, dataset_1), plt.plot (ось x, dataset_2) и т.д. В итоге я просто перебирал каждый список и делил значения на 10 ** 9. Как это будет работать с numpy? Можете ли вы дать мне более подробную информацию? Спасибо.

3. Конечно! Посмотрите мой пример ниже.

Ответ №1:

Вы можете масштабировать свои данные с помощью numpy.array, а затем указать масштабирование по оси y:

 import numpy as np
import matplotlib.pyplot as plt 

#scale the data appropriately with numpy.array
dataset_1 = np.array(dataset_1)
scaled_dataset_1 = dataset_1/(10**9)

#plot with scaling specified in label
plt.plot(x_axis, scaled_dataset_1)
plt.ylabel('Dataset 1 (10^9)')
  

Ответ №2:

Чтобы изменить ось Y на экспоненциальную, вы можете использовать следующие настройки, пожалуйста, обратитесь к этой странице.

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

x = np.arange(0, 200000000, 1)
fig, ax = plt.subplots(figsize=(6, 6))

ax.plot(x * 1000000, x * 100000)
ax.yaxis.set_major_formatter(ScalarFormatter(useMathText=True))
ax.ticklabel_format(style="sci",  axis="y", scilimits=(0,0))

plt.show()
  

введите описание изображения здесь