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]:
HC LC Binding
44 DC NL 8425
45 DC CC 2700
46 DC NC 20775
47 DC DL 14750
48 DC DC 8425

데이터프레임을 출력해보면 48개의 데이터가 있고, HC, LC, Binding 행으로 구성되어 있습니다. Binding 행에 대해 기술 통계분석을 해봅니다.

In [3]:
df.describe()
Out[3]:
Binding
count 49.000000
mean 13840.306122
std 8812.934115
min 2700.000000
25% 2700.000000
50% 14750.000000
75% 20775.000000
max 26800.000000

위의 결과를 통해 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.legend.Legend at 0x186e5198>
No description has been provided for this image

똑같지는 않지만 비슷한 그래프를 그릴 수 있습니다. 게다가 코드도 간단합니다.

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()
No description has been provided for this image