2016-12-20 9 views
0

Я построил график с двумя осями y и теперь хотел бы добавить две отдельные линии тренда для каждой из графиков y.Как добавить несколько линий тренда pandas

Это мой код:

import matplotlib.pyplot as plt 
import pandas as pd 
import numpy as np 
%matplotlib inline 

amp_costs=pd.read_csv('/Users/Ampicillin_Costs.csv', index_col=None, usecols=[0,1,2]) 
amp_costs.columns=['PERIOD', 'ITEMS', 'COST PER ITEM'] 

ax=amp_costs.plot(x='PERIOD', y='COST PER ITEM', color='Blue', style='.', markersize=10) 
amp_costs.plot(x='PERIOD', y='ITEMS', secondary_y=True, 
color='Red', style='.', markersize=10, ax=ax) 

Любое руководство о том, как построить эти две линии тренда на этом графике были бы оценены!

+0

Похоже, что вы сделали только что в вашем коде. В чем проблема? Какой выход вы получили? Пожалуйста, сделайте для нас минимальный воспроизводимый пример. Это намного легче ответить на вопросы таким образом. http://stackoverflow.com/questions/20109391/how-to-make-good-reproducible-pandas-examples –

+0

Какая линия тренда? Линейный? Средняя скорость? Что не работает в вашем коде? что вы пробовали? –

+0

@DemetriP Linear ... Этот код работает нормально, однако я не уверен, с чего начать, чтобы добавить две линии тренда - по 1 для каждого набора данных. –

ответ

1

Вот краткий пример использования sklearn.linear_model.LinearRegression, чтобы сделать линию тренда.

import pandas as pd 
import numpy as np 
import matplotlib.pyplot as plt 
from sklearn.linear_model import LinearRegression 
plt.style.use('ggplot') 
%matplotlib inline 

period = np.arange(10) 
items = -2*period +1 + np.random.randint(-2,2,len(period)) 
cost = 35000*period +15000 + np.random.randint(-25000,25000,len(period)) 
data = np.vstack((period,items,cost)).T 
df = pd.DataFrame(data, columns=\['P','ITEMS', 'COST'\]).set_index('P') 


lmcost = LinearRegression().fit(period.reshape(-1,1), cost.reshape(-1,1)) 
lmitems = LinearRegression().fit(period.reshape(-1,1), items.reshape(-1,1)) 

df['ITEMS_LM'] = lmitems.predict(period.reshape(-1,1)) 
df['COST_LM'] = lmcost.predict(period.reshape(-1,1)) 

fig,ax = plt.subplots() 


df.ITEMS.plot(ax = ax, color = 'b') 
df.ITEMS_LM.plot(ax = ax,color= 'b', linestyle= 'dashed') 
df.COST.plot(ax = ax, secondary_y=True, color ='g') 
df.COST_LM.plot(ax = ax, secondary_y=True, color = 'g', linestyle='dashed') 

enter image description here

+0

'amp_costs = pd.read_csv ('/Users/Ampicillin_Costs.csv ', index_col = None, usecols = [1,2]) amp_costs.columns = [' ITEMS ',' COST PER ITEM '] z = np. polyfit (x = amp_costs.loc [:, amp_costs ['COST PER ITEM']], y = amp_costs.loc [:, amp_costs ['ITEMS']], deg = 1) p = np.poly1d (z) amp_costs [ 'трендовая'] = р (amp_costs.loc [:, amp_costs [ 'Плата за штуку']]) х = amp_costs [ 'Плата за штуку'] Y = amp_costs [ 'С'] Ax = amp_costs .plot.scatter (х, у) amp_costs.set_index (х, Inplace = True) amp_costs.trendline.sort_index (по возрастанию = False) .plot (ах = ах) plt.gca(). invert_xaxis() PLT .показать()' –

 Смежные вопросы

  • Нет связанных вопросов^_^