2016-10-17 35 views
1

下のコードでは、3行の図をプロットすることができますが、角度があります。線を滑らかにすることは可能ですか?pythonの図の線を滑らかにする方法は?

import matplotlib.pyplot as plt 
import pandas as pd 

# Dataframe consist of 3 columns 
df['year'] = ['2005, 2005, 2005, 2015, 2015, 2015, 2030, 2030, 2030'] 
df['name'] = ['A', 'B', 'C', 'A', 'B', 'C', 'A', 'B', 'C'] 
df['weight'] = [80, 65, 88, 65, 60, 70, 60, 55, 65] 
fig,ax = plt.subplots() 

# plot figure to see how the weight develops through the years 
for name in ['A','B','C']: 
    ax.plot(df[df.name==name].year,df[df.name==name].weight,label=name) 

ax.set_xlabel("year") 
ax.set_ylabel("weight") 
ax.legend(loc='best') 
+0

私はそれは同じ質問だとは思わない@poke。私は以前に他の質問の答えを試しています。私はなぜそれが動作しないのかわかりませんが、私は3列または2列しか持っていない他の質問の代わりにここで仕事をしなければならないので、少し違うと思います。 – Jolie

+0

プロットする前にデータを補間する必要があります.SO – Boud

答えて

1

データに補間を適用する必要があります。「線形」であってはなりません。ここでは、scipyのinterp1dを使って "3次"補間を適用しました。また、3次補間を使用するには、データに少なくとも4つのポイントが必要です。だから私は(私は重みの最後の値から1を減算することにより、新たな重量値を得た)あまりにもすべての重みを別の年2031年、別の値を追加しました:

import matplotlib.pyplot as plt 
import pandas as pd 
from scipy.interpolate import interp1d 
import numpy as np 

# df['year'] = ['2005, 2005, 2005, 2015, 2015, 2015, 2030, 2030, 2030'] 
# df['name'] = ['A', 'B', 'C', 'A', 'B', 'C', 'A', 'B', 'C'] 
# df['weight'] = [80, 65, 88, 65, 60, 70, 60, 55, 65] 

df1 = pd.DataFrame() 
df1['Weight_A'] = [80, 65, 60 ,59] 
df1['Weight_B'] = [65, 60, 55 ,54] 
df1['Weight_C'] = [88, 70, 65 ,64] 
df1.index = [2005,2015,2030,2031] 


ax = df1.plot.line() 
ax.set_title('Before interpolation') 
ax.set_xlabel("year") 
ax.set_ylabel("weight") 

f1 = interp1d(df1.index, df1['Weight_A'],kind='cubic') 
f2 = interp1d(df1.index, df1['Weight_B'],kind='cubic') 
f3 = interp1d(df1.index, df1['Weight_C'],kind='cubic') 

df2 = pd.DataFrame() 
new_index = np.arange(2005,2031) 
df2['Weight_A'] = f1(new_index) 
df2['Weight_B'] = f2(new_index) 
df2['Weight_C'] = f3(new_index) 
df2.index = new_index 

ax2 = df2.plot.line() 
ax2.set_title('After interpolation') 
ax2.set_xlabel("year") 
ax2.set_ylabel("weight") 


plt.show() 

と結果:

ここではコードです

Before interpolation After interpolation

+0

の例がたくさんあります。私はほぼ一日中ラインを滑らかにしようとしていただけです。最後に、すべてのデータの間に余分なポイントを置いて少し滑らかにします。あなたのコードは私に多くの助けになります、ありがとう! – Jolie

+0

@Jolie問題なし:) – Yugi

関連する問題