Построить массив вместе с несколькими столбцами панд - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть фрейм данных pandas, в котором я пытаюсь построить два из его столбцов, для которых я делаю:

from matplotlib import pyplot as plt
import numpy as np    
fig, ax = plt.subplots()
df.plot(x = 'x', y = 'y1', ax = ax, label = 'y1', marker='.')
df.plot(x = 'x', y = 'y2', ax = ax, label = 'y2', marker='.')

Проблема возникает, когда я пытаюсь изобразить два графика для третьей переменной (y3) вместе с этими колоннами панд.y3 рассчитывается следующим образом:

z = np.polyfit(df['x'].values, df['y2'].values, 3)
f = np.poly1d(z)
y3 = f(df['y2'].values)

Я использовал следующие два подхода, чтобы добавить это к моему предыдущему графику:

ax.plot(x = df['x'].values, y = y3, label = 'estimated', marker = '^')

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

plt.plot(x = df['x'].values, y = y3, label = 'estimated', marker = '^', ax = ax)

, который выдает:

TypeError: inner() got multiple values for keyword argument 'ax'

Как бы я добавил эту третью строку к моему графику, используя значения, хранящиеся в y3, который, кстати, является недействительныммассив?

1 Ответ

0 голосов
/ 18 декабря 2018

Для первых двух графиков вы используете свой DataFrame df для непосредственного построения столбцов, используя df.plot(), где x и y требуются как ключевое слово (необязательно) аргументы (т.е., работает без x= и y=) ( официальные документы ).Таким образом, использование x=... и y=... работает для df.plot().

Однако в своей третьей команде построения вы используете экземпляр оси ax для построения графика с использованием ax.plot(), где вы просто используетеЗначения DataFrame в качестве аргументов.ax.plot() принимает значения x и y как позиционные аргументы, как разъяснено ImportanceOfBeingErnest .

Поэтому, чтобы ответить на вашу проблему, вам нужно использовать

ax.plot(df['x'].values, y3, label = 'estimated', marker = '^')

, удалив x= и y= из вашей команды заговора.

Точно так же будет работать следующее

plt.plot(df['x'].values, y3, label = 'estimated', marker = '^')

, где plt относится к текущему объекту оси.

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