Matplotlib сгущает Y-Ticks, чтобы быть полезным - PullRequest
0 голосов
/ 25 октября 2018

Попытка построить набор точек, где пара точек имеет экстремальные значения Y.Есть ли способ показать эти значения на графике, не теряя значения других точек.Например:

[(1, 10), (2, 33), (3, 100000), (4, 17), (5, 45), (6, 8), (7, 950000)]

Я представляю график с тиками Y 0-50, а затем промежуток аналогичного размера между 50-100000, чтобы продемонстрировать крайнюю точку.

1 Ответ

0 голосов
/ 25 октября 2018

Не уверен, может ли matplotlib сделать это автоматически, но есть несколько попыток:

  • Использовать ось логарифмического масштабирования, т.е. ax.set_yscale('log').Это в некоторой степени уменьшит разницу между обычными и выпадающими точками, но вы все равно увидите все обычные данные, лежащие в нижней части графика.

  • Вручную измените значение y навыбросы к некоторой не такой уж экстремальной ценности.Позже вы можете показать, что эти точки имеют какое-то значение, вручную установив отображение содержимого оси Y, используя plt.yticks(actual_data_array, what_to_display_array)

  • Создайте регулярный (достаточно высокий) график, затем выполните обработку изображения позжевырезать среднюю часть изображения.Возможно, есть лучший способ, но один из способов сделать это - plt.savefig, чтобы сохранить график, matplotlib.image.imread, чтобы прочитать график и, наконец, обработать его, используя plt.imshow(np.concatenate((image_data[:100], image_data[-100:]), 0))

* 1022.* Вот пример второго метода, о котором я говорил:
import numpy as np
import matplotlib.pyplot as plt

a = np.array(((1, 10), (2, 33), (3, 100000), (4, 17), (5, 45), (6, 8), (7, 950000)), 'f')

# scale the array so that matplotlib can plot it "uniformly"
a[a[:,1]>99999,1] = a[a[:,1]>99999,1] / 20000 + 55

plt.plot(*a.T)

# do the displaying trick 
plt.yticks(np.r_[np.linspace(0, 50, 5),
                 np.linspace(100000/20000+55, 950000/20000+55, 5)],
           np.r_[np.linspace(0, 50, 5, dtype='i'),
                 np.linspace(100000, 950000, 5, dtype='i')])

plt.grid()

Это выглядит так:

enter image description here

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