96well 모양으로 시각화하기
논문을 읽다 보면 위의 그림의 A 처럼 96well 형태로 시각화한것을 볼 수 있습니다. 가만히 생각해보면 위의 그림은 산점도(scatter plot)을 그리고 Binding 값을 점의 크기로 표현하면 될 것같습니다. 오늘은 그런 그림을 파이썬으로 그려봅니다.
필요한 라이브러리 불러오기¶
In [1]:
%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
from IPython.display import set_matplotlib_formats
set_matplotlib_formats("retina")
데이터 불러오기¶
시각화할 데이터를 pandas
로 불러옵니다.
In [2]:
df = pd.read_csv("../data/20190213_test.csv")
df.tail()
Out[2]:
데이터프레임을 출력해보면 48개의 데이터가 있고, HC, LC, Binding 행으로 구성되어 있습니다. Binding 행에 대해 기술 통계분석을 해봅니다.
In [3]:
df.describe()
Out[3]:
위의 결과를 통해 Binding의 최대값은 26800, 최소값은 2700, 평균은 13840인것을 알 수 있습니다.
Seaborn 사용하기¶
seaborn
라이브러리를 사용해 시각화해봅니다.
In [4]:
plt.ylim(-1, 7)
plt.xlim(-1, 7)
ax = sns.scatterplot(
x="LC", y="HC", hue="Binding", size="Binding", data=df, sizes=(100, 500)
)
# Put the legend out of the figure
ax.legend(loc="upper left", bbox_to_anchor=(1.04, 1), ncol=1)
Out[4]:
똑같지는 않지만 비슷한 그래프를 그릴 수 있습니다. 게다가 코드도 간단합니다.
Matplotlib 사용하기¶
matplotlib
을 사용해 구현해봅니다. seaborn
보다는 복잡하지만 좀 더 유연하게 사용할 수 있습니다.
In [5]:
plt.scatter(
df["HC"].values,
df["LC"].values,
c=df["Binding"].values,
s=df["Binding"].values / 50,
cmap="Purples",
)
plt.ylim(-1, 7)
plt.xlim(-1, 7)
g1 = plt.scatter([], [], s=0, marker="o", color="#555555")
g2 = plt.scatter([], [], s=200, marker="o", color="#555555")
g3 = plt.scatter([], [], s=300, marker="o", color="#555555")
g4 = plt.scatter([], [], s=400, marker="o", color="#555555")
plt.legend(
(g1, g2, g3, g4),
("0", "10000", "20000", "30000"),
scatterpoints=1,
loc="upper left",
ncol=1,
bbox_to_anchor=(1.04, 1),
)
plt.show()