Matplotlib: построение графиков из нескольких линий в одном и в разных масштабах

Введение Matplotlib - одна из наиболее широко используемых библиотек визуализации данных в Python. От простых до сложных визуализаций - это библиотека для большинства. В этом уроке мы рассмотрим, как построить несколько линейных графиков в Matplotlib - на одних и тех же осях или фигуре. Если вы хотите узнать больше о построении линейных графиков в целом, а также об их настройке, обязательно прочтите наше руководство по построению линейных графиков с помощью Matplotlib [/ matplotlib-line-plot-tutorial-and-examples /]. Pl

Вступление

Matplotlib - одна из наиболее широко используемых библиотек визуализации данных в Python. От простых до сложных визуализаций - это библиотека для большинства.

В этом уроке мы рассмотрим, как построить несколько линейных графиков в Matplotlib - на одних и тех же Axes или Figure .

Если вы хотите узнать больше о построении линейных графиков в целом, а также об их настройке, обязательно прочтите наше руководство по построению линейных графиков с помощью Matplotlib .

Постройте многострочные графики в Matplotlib

В зависимости от стиля, который вы используете, ООП или стиля MATLAB, вы будете использовать либо plt , либо ax для построения графика с тем же подходом.

Чтобы построить несколько линейных графиков в Matplotlib, вы просто несколько раз вызываете plot() , которая применяет изменения к одному и тому же объекту Figure

 import matplotlib.pyplot as plt 
 
 x = [1, 2, 3, 4, 5, 6] 
 y = [2, 4, 6, 5, 6, 8] 
 y2 = [5, 3, 7, 8, 9, 6] 
 
 fig, ax = plt.subplots() 
 
 ax.plot(x, y) 
 ax.plot(x, y2) 
 plt.show() 

Без установки каких-либо флагов настройки будет применяться палитра по умолчанию, рисуя оба линейных графика на одном и том же Figure и настраивая цвет, чтобы различать их:

{.ezlazyload}

Теперь давайте сгенерируем несколько случайных последовательностей с помощью Numpy и немного настроим линейные графики, установив для каждого определенный цвет и пометив их:

 import matplotlib.pyplot as plt 
 import numpy as np 
 
 line_1 = np.random.randint(low = 0, high = 50, size = 50) 
 line_2 = np.random.randint(low = -15, high = 100, size = 50) 
 
 fig, ax = plt.subplots() 
 
 ax.plot(line_1, color = 'green', label = 'Line 1') 
 ax.plot(line_2, color = 'red', label = 'Line 2') 
 ax.legend(loc = 'upper left') 
 plt.show() 

Нам не нужно передавать значения оси X на линейный график, и в этом случае будут применяться 0..n n , где n - последний элемент данных, которые вы строите. В нашем случае у нас есть две последовательности данных - line_1 и line_2 , которые будут нанесены на одну и ту же ось X.

Во время построения мы присвоили им цвета, используя color , и метки для легенды, используя аргумент label Это приводит к:

{.ezlazyload}

Постройте многолинейные графики с разными масштабами

Иногда у вас может быть два набора данных, подходящих для линейных графиков, но их значения значительно отличаются, что затрудняет сравнение обеих линий. Например, если в line_1 была экспоненциально возрастающая последовательность чисел, а в line_2 - линейно возрастающая последовательность - несомненно и достаточно быстро, в line_1 были бы значения настолько большие, чем в line_2 , что последняя исчезает из поля зрения.

Давайте использовать Numpy, чтобы создать экспоненциально возрастающую последовательность чисел и построить ее рядом с другой линией на тех же Axes , линейно:

 import matplotlib.pyplot as plt 
 import numpy as np 
 
 linear_sequence = np.linspace(0, 10, 10) 
 # [0, 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 10] 
 exponential_sequence = np.exp(linear_sequence) 
 # [1.00e+00, 3.03e+00, 9.22e+00, 2.80e+01, 8.51e+01, 2.58e+02, 7.85e+02, 2.38e+03, 7.25e+03, 2.20e+04] 
 
 fig, ax = plt.subplots() 
 
 ax.plot(linear_sequence) 
 ax.plot(exponential_sequence) 
 plt.show() 

Выполнение этого кода приводит к:

{.ezlazyload}

Экспоненциальный рост exponential_sequence выходит из-под контроля очень быстро, и похоже, что нет абсолютно никакой разницы в linear_sequence , поскольку она настолько мала по сравнению с экспоненциальным трендом другой последовательности.

Теперь давайте построим exponential_sequence в логарифмическом масштабе, что даст визуально прямую линию, поскольку масштаб Y будет экспоненциально увеличиваться. Если мы построим его в логарифмическом масштабе, а linear_sequence просто увеличится на ту же константу, у нас будет две перекрывающиеся линии, и мы сможем увидеть только одну, построенную после первой.

Давайте linear_sequence чтобы сделать его наблюдаемым, как только мы построим оба графика:

 import matplotlib.pyplot as plt 
 import numpy as np 
 
 # Sequences 
 linear_sequence = [1, 2, 3, 4, 5, 6, 7, 10, 15, 20] 
 exponential_sequence = np.exp(np.linspace(0, 10, 10)) 
 
 fig, ax = plt.subplots() 
 
 # Plot linear sequence, and set tick labels to the same color 
 ax.plot(linear_sequence, color='red') 
 ax.tick_params(axis='y', labelcolor='red') 
 
 # Generate a new Axes instance, on the twin-X axes (same position) 
 ax2 = ax.twinx() 
 
 # Plot exponential sequence, set scale to logarithmic and change tick color 
 ax2.plot(exponential_sequence, color='green') 
 ax2.set_yscale('log') 
 ax2.tick_params(axis='y', labelcolor='green') 
 
 plt.show() 

На этот раз нам придется использовать интерфейс ООП, поскольку мы создаем новый экземпляр Axes One Axes имеет один масштаб, поэтому мы создаем новый, в том же положении, что и первый, и устанавливаем его масштаб на логарифмический, и строим экспоненциальную последовательность.

Это приводит к:

{.ezlazyload}

Мы также изменили цвета меток галочки, чтобы они соответствовали цвету самих линейных графиков, иначе было бы трудно отличить, какая линия на каком масштабе.

Постройте графики с несколькими линиями с несколькими осями Y

Наконец, мы можем применить тот же масштаб (линейный, логарифмический и т. Д.), Но иметь разные значения по оси Y каждого линейного графика. Это достигается за счет того, что несколько осей Y на разных Axes находятся в одном и том же положении.

Например, linear_sequence не будет превышать 20 по оси Y, в то время как exponential_sequence будет увеличиваться до 20000. Мы можем построить их оба линейно , просто нанеся их на разные Axes в одной и той же позиции, каждый из которых автоматически установите отметки оси Y, чтобы они соответствовали вводимым нами данным:

 import matplotlib.pyplot as plt 
 import numpy as np 
 
 # Sequences 
 linear_sequence = [1, 2, 3, 4, 5, 6, 7, 10, 15, 20] 
 exponential_sequence = np.exp(np.linspace(0, 10, 10)) 
 
 fig, ax = plt.subplots() 
 
 # Plot linear sequence, and set tick labels to the same color 
 ax.plot(linear_sequence, color='red') 
 ax.tick_params(axis='y', labelcolor='red') 
 
 # Generate a new Axes instance, on the twin-X axes (same position) 
 ax2 = ax.twinx() 
 
 # Plot exponential sequence, set scale to logarithmic and change tick color 
 ax2.plot(exponential_sequence, color='green') 
 ax2.tick_params(axis='y', labelcolor='green') 
 
 plt.show() 

Мы снова создали еще одну Axes в той же позиции, что и первая, поэтому мы можем рисовать в том же месте на Figure но разные Axes , что позволяет нам устанавливать значения для каждой оси Y индивидуально.

Без установки логарифмической шкалы Y на этот раз, оба графика будут построены линейно:

{.ezlazyload}

Заключение

В этом руководстве мы рассмотрели, как построить несколько линейных графиков на одной Figure или Axes в Matplotlib и Python. Мы рассмотрели, как построить график на одних и тех же Axes с одинаковым масштабом и осью Y, а также как построить график на одном Figure с разными и одинаковыми масштабами оси Y.

Если вас интересует визуализация данных и вы не знаете, с чего начать, обязательно ознакомьтесь с нашим комплектом книг по визуализации данных в Python{.ebook-link} :

::: {style=“border: 1px solid #ebebeb;padding: 15px;"} {.ebook-link}

Визуализация данных в Python

::: {.row} ::: {.col-md-4 .col-xs-12} {.ezlazyload .img-responsive .center-block} :::

::: {.col-md-8 .col-xs-12 .my-auto} Станьте опасными с визуализацией данных

✅ 30-дневная гарантия возврата денег без вопросов

✅ от начального до продвинутого

✅ Регулярно обновляется бесплатно (последнее обновление в апреле 2021 г.)

✅ Обновлено с бонусными ресурсами и руководствами ::: ::: :::

Визуализация данных в Python с помощью Matplotlib и Pandas - это книга, предназначенная для абсолютных новичков в работе с Pandas и Matplotlib с базовыми знаниями Python и позволяющая им создать прочную основу для расширенной работы с этими библиотеками - от простых графиков до анимированных трехмерных графиков с интерактивными кнопки.

Он служит подробным руководством, которое научит вас всему, что вам нужно знать о Pandas и Matplotlib, в том числе о том, как создавать типы графиков, которые не встроены в саму библиотеку.

Книга «Визуализация данных в Python» , книга для начинающих и средних разработчиков Python, проведет вас через простые манипуляции с данными с помощью Pandas, охватит основные библиотеки построения графиков, такие как Matplotlib и Seaborn, и покажет, как использовать преимущества декларативных и экспериментальных библиотек, таких как Altair. В частности, на протяжении 11 глав эта книга охватывает 9 библиотек Python: Pandas, Matplotlib, Seaborn, Bokeh, Altair, Plotly, GGPlot, GeoPandas и VisPy.

Он служит уникальным практическим руководством по визуализации данных в виде множества инструментов, которые вы можете использовать в своей карьере.

comments powered by Disqus