пересадочные участки в одну цифру в Python - PullRequest
2 голосов
/ 16 июня 2020

Я могу наложить две кривые на 1 график вот так

X = np.array([1, 5, 8])
y = np.array([2, 10, 3])

x_max = np.array([5])
y_max = np.array([10])

fig, ax = plt.subplots(figsize=(8,6));

ax.plot(X, y, 'k--', label="savitzky")
ax.scatter(x_max, y_max, s=200, c='k', marker='*');

Тогда я получу следующее:

enter image description here

Допустим, у меня есть фрейм данных, и я хочу построить сразу все его столбцы. Я могу сделать это так:

df_2 = pd.DataFrame(data = {'col_1':np.array([2, 10, 3]), 'col_2':np.array([3, 4, 7])}, 
                index = np.array([1, 5, 8]))
df_2.plot()

, чтобы получить:

enter image description here

Мой вопрос в том, как я могу объединить эти два, чтобы Я могу построить сразу весь фрейм данных, а затем наложить его на мои векторы максимальных точек? (Мой реальный фрейм данных больше этого, как и векторы максимумов)

Спасибо

Ответы [ 2 ]

2 голосов
/ 17 июня 2020

Вы можете сделать это так:

Здесь я назначил объект оси, заданный df_2.plot, ax и построил на нем дальнейший график (ax) X = np.array ([1, 5, 8]) y = np.array ([2, 10, 3])

x_max = np.array([5])
y_max = np.array([10])

df_2 = pd.DataFrame(data = {'col_1':np.array([2, 10, 3]), 'col_2':np.array([3, 4, 7])}, index = np.array([1, 5, 8]))
ax=df_2.plot(figsize=(8,6))

ax.plot(X, y, 'k--', label="savitzky")
ax.scatter(x_max, y_max, s=200, c='k', marker='*');

plt.show()

imageOutput">

2 голосов
/ 17 июня 2020

Вот один из способов сделать это:

  1. Создать объект оси ax
  2. Нанести DataFrame на эту ось
  3. Получить максимальный элемент и соответствующий индекс для каждого столбца
  4. Постройте диаграмму рассеяния на той же оси ax

fig, ax = plt.subplots()

df_2 = pd.DataFrame(data = {'col_1':np.array([2, 10, 3]), 
                            'col_2':np.array([3, 4, 7])}, 
                            index = np.array([1, 5, 8]))
df_2.plot(ax=ax) # Plot the DataFrame on ax object

max_points = [(df_2[col].idxmax(),  df_2[col].max()) for col in df_2.columns]

ax.plot(*zip(*max_points), 'b*', ms=10) # Unpack the list of (x, y) tuples
ax.set_xlim(None, 8.2)

enter image description here

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