binned errorbar plot with matplotlib

목적



왼쪽 그림과 같은 산점도를 그릴 수있는 상황에서 matplotlib 등에서 오른쪽 그림을 만드는 절차를 소개합니다.


양 로그 스케일에서 plot을 다룬 기사. 선형 스케일과 양 로그 스케일은 bin 나누기와 fitting 부분이 다릅니다.

환경



파이썬 3.9
Numpy 1.20.1
Pandas 1.2.0
Matplotlib 3.3.3
scikit-learn 0.24.1

방법



import
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.metrics import r2_score

데이터 개요

데이터가 pandas의 DataFrame에 있다고 가정합니다.
print(df.head())

output
          x         y
0  0.086787  0.296361
1  0.379250  1.195589
2  0.099694  0.207927
3  0.902494  2.255489
4  0.890014  2.071342

binning, mean&std/quantile 계산, fitting

# 例えばxをbin幅 1/bins=1/20 で分割したい時
bins=20
df['xbin']=round(bins*df.x)/bins

# mean&std/quantilesの計算
m=df.groupby('xbin').mean()
s=df.groupby('xbin').std()

# 1次関数でfitting
c=np.polyfit(m.index,m.y,1)
l=np.poly1d(c)(m.index)
r2=r2_score(l,m.y)

print(df.head())

output
          x         y  xbin
0  0.086787  0.296361   0.1
1  0.379250  1.195589   0.4
2  0.099694  0.207927   0.1
3  0.902494  2.255489   0.9
4  0.890014  2.071342   0.9

plot
plt.rcParams['font.family'] = 'Arial' 
plt.rcParams['mathtext.fontset'] = 'stix' 
plt.rcParams['font.size'] = 15 
plt.rcParams['xtick.labelsize'] = 9 
plt.rcParams['ytick.labelsize'] = 9 
plt.rcParams['xtick.direction'] = 'in' 
plt.rcParams['ytick.direction'] = 'in' 
plt.rcParams['axes.linewidth'] = 0.7 
plt.rcParams['axes.grid'] = False 

plt.title('binned errorbar plot test: linear')
plt.xlabel('$x$')
plt.ylabel('$y$')
plt.errorbar(m.index, m.y, yerr=s.y, fmt='o', marker='s', mfc='#000000', mec='#000000', 
             ecolor='#2e3436', elinewidth=0.5, capsize=1.0, capthick=1.0)
plt.plot(m.index,l, color='#2e3436', linestyle=':')
plt.text(max(m.index)/3.7, max(m.y)*6/8, '$y$={:.2f}$x$ + {:.2f}, \n$R^2$={:.2f}'.format(c[0], c[1], r2), fontsize=15)
plt.savefig('test_linear.pdf')

이 방법으로 시작 부분의 오른쪽 그림 test_linear.pdf을 얻었습니다.

배경



이번에 사용한 예에서는 고난이 전해지기 어려웠을지도 모르지만, 산점도 그 자체를 사용하면 이상치의 영향으로 인해 혼잡해지는 경우가 존재한다. 표준 편차/사분위를 사용하여 멋지게 보이게 할 수 있습니다.

링크



다음 두 링크로 공부했습니다. 고맙습니다.

matplotlib 오류 막대가있는 그래프 그리기plt.errorbar를 사용하는 방법과 1 차 함수를 사용한 fitting 예제가 있습니다.

Matplotlib로 깨끗한 논문용 그래프 만들기 plt.rcParams['hoge']를 사용하여 matplotlib의 기본 설정을 변경하여 멋지게 볼 수 있습니다.

좋은 웹페이지 즐겨찾기