График после определенного значения, как пунктир для 3 DataFrame на том же графике - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть 3 разных DataFrame (A, B и C) с одинаковыми именами столбцов, которые я хочу построить на одном графике.

Пример одного из DataFrame

A
    cbk_year    mean           units    representative
1   1       1.8041611624834875  6084    True
2   2       1.7408852714906902  8969    True
3   3       1.5521109207041595  7419    True
4   4       1.5265214963707425  9373    True
5   5       1.5133333333333334  6650    True
6   6       1.5703619909502262  4420    False
7   7       1.5744843391902215  3927    False
...
...

cbk_year has been plotted in x-axis, mean plotted in y-axis

Предположим, что вышеуказанный кадр данных представлен оранжевой линией, где «cbk_year» представляет ось x, а «среднее» нанесено на ось y.
Я хочу, чтобы график был представлен пунктирной линией, где «представитель» неверен. Например, оранжевая линия должна быть (год 1-5 непрерывной) и (6-7 пунктирной).

1 Ответ

1 голос
/ 28 апреля 2020

Чтобы вывести все на один и тот же участок, всем нужно дать одинаковое ax. Чтобы отобразить только часть кадра данных, его можно нарезать как в df1[df1['year'] <= 5]. Может быть установлен другой стиль линии. Обратите внимание, что «<=» и «> =» используются для рисования линий без прерывания.

Записи легенды, начинающиеся с подчеркивания, будут подавлены в легенде (в случае, если вы не хотите, чтобы они были дважды). Но вы также можете указать другой ярлык (например, label='estimated').

from matplotlib import pyplot as plt
import numpy as np
import pandas as pd

N = 10
df1 = pd.DataFrame({'year': np.arange(1, N + 1), 'rate': np.random.normal(2, 0.2, N)})
df2 = pd.DataFrame({'year': np.arange(1, N + 1), 'rate': np.random.normal(2.5, 0.2, N)})

fig, ax = plt.subplots()
df1[df1['year'] <= 5].plot('year', 'rate', color='C1', ls='-', ax=ax, label='df1')
df1[df1['year'] >= 5].plot('year', 'rate', color='C1', ls=':', ax=ax, label='_')
df2[df2['year'] <= 5].plot('year', 'rate', color='C2', ls='-', ax=ax, label='df2')
df2[df2['year'] >= 5].plot('year', 'rate', color='C2', ls=':', ax=ax, label='_')
plt.show()

example plot

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