Вступление
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.
Он служит уникальным практическим руководством по визуализации данных в виде множества инструментов, которые вы можете использовать в своей карьере.