지난번 2by2 4개의 subplot을 6개로 변화 시키는 코드를 만들엇어요. 그리고 Title도 ^GSPC가 아니라 "SNP500"으로 변경시켜주는 기능도 탑재했다.
그리고 만일 변수가 6개가 아니라 5하면, 자동으로 빈칸으로 두지 않고 빈칸을 지워주는 기능도 추가했다.
update한 코드는 다음과 같아요.
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import yfinance as yf
# 데이터 다운로드
start_date = '2023-01-01'
end_date = '2025-12-23'
top_tickers = ['GOOGL', 'MSFT', 'AMZN','NVDA','005930.ks', '000660.ks']
# 서브플롯 생성
fig, axs = plt.subplots(3, 2, figsize=(15, 8))
# 각 티커에 대해 데이터 플로팅
for i, ticker in enumerate(top_tickers):
row, col = divmod(i, 2)
data = yf.download(ticker, start=start_date, end=end_date)
axs[row][col].plot(data.index, data['Close'], label=f'{ticker}')
# YTD 수익률 계산 (값 추출: .iloc[0]과 .iloc[-1]에 .values[0] 추가)
initial_price = data['Close'].iloc[0]
final_price = data['Close'].iloc[-1]
ytd_return = ((final_price - initial_price) / initial_price * 100).item() # .item()으로 스칼라 값 추출
# 제목에 YTD 수익률 추가
axs[row][col].set_title(f'{ticker} (YTD: {ytd_return:.2f}%)')
axs[row][col].set_xlabel('Date')
axs[row][col].set_ylabel('Price')
axs[row][col].legend()
axs[row][col].grid(True)
# 날짜 포맷팅
axs[row][col].xaxis.set_major_locator(mdates.MonthLocator(interval=2))
axs[row][col].xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m'))
plt.setp(axs[row][col].xaxis.get_majorticklabels(), rotation=45, ha='right')
plt.tight_layout(rect=[0, 0.03, 1, 0.95])
plt.savefig('top4_prices_2.png', dpi=300)
plt.show()