def plotFrontier( result, label=None, color='black' ):
# 최적화된 효율적 투자선 출력
plt.text( result[ 'tan_var' ] ** .5, result[ 'tan_mean' ], 'tangent', verticalalignment='center', color=color )
plt.scatter( result[ 'tan_var' ] ** .5, result[ 'tan_mean' ], marker='o', color=color )
plt.plot( result[ 'eff_var' ] ** .5, result[ 'eff_mean' ], label=label, color=color, linewidth=2, marker='D', markersize=9 )
# 첫 번째 최적화 결과를 차트로 출력
plotAssets( tickers, R, C, color='blue' )
plotFrontier( opt1, label='Historical returns', color='blue' )
# 두 번째 최적화 결과를 차트로 출력
plotAssets( tickers, pi+rf, C, color='green' )
plotFrontier( opt2, label='Implied returns', color='green' )
# 세 번째 최적화 결과를 차트로 출력
plotAssets( tickers, pi_adj+rf, C, color='red' )
plotFrontier( opt3, label='Implied returns (adjusted views)', color='red' )
# 차트에 공통된 속성을 지정한다(차트 크기, 제목, 범례, 축 이름 등)
plt.rcParams[ "figure.figsize" ] = ( 12, 10 )
plt.grid( alpha=0.3, color='gray', linestyle='--', linewidth=1 )
plt.title( 'Portfolio optimization' )
plt.legend( [ 'Historical returns(blue)', 'Implied returns(green)','Implied returns with adjusted views(red)' ] )
plt.xlabel( 'Variance $\sigma$' )
plt.ylabel( 'Mean $\mu$' )
plt.show( )