散点图与散点图矩阵

  |  

摘要: 本文是散点图与散点图矩阵的代码模板。

【对数据分析、人工智能、金融科技、风控服务感兴趣的同学,欢迎关注我哈,阅读更多原创文章】
我的网站:潮汐朝夕的生活实验室
我的公众号:潮汐朝夕
我的知乎:潮汐朝夕
我的github:FennelDumplings
我的leetcode:FennelDumplings


散点图

散点图一般用于描述两个数量型变量之间的相关关系。

有了 x 和 y 两个变量的数据,画散点图有以下几种方法。

  • 方法1:df.plot()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
df = pd.read_csv("2018-07-20_2018-07-27.csv")
columns = [x for x in df.columns if x not in ["date", "instrument"]]

fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
df.plot(x='open/mean(close,5)', y='pred_label', kind='scatter', s=10**2, c='b', marker='o', ax=ax)
# s: 散点的面积,
# c: 散点的颜色
# marker: 散点的形状
# ax: 散点图绘制的子图位置
ax.set_title('The relationship between open/mean(close,5) and pred_label')
ax.set_xlabel('open/mean(close,5)')
ax.set_ylabel('pred_label')
fig.savefig('p.png')

  • 方法2:axes 对象的方法 ax.scatter()
1
ax.scatter(x=df['open/mean(close,5)'], y=df['pred_label'], s=10**2, c='g', marker='^')

  • 方法3:seaborn.scatterplot()
1
sns.scatterplot(x=df['open/mean(close,5)'],y=df['pred_label'], s=10**2, data=df, ax=ax)

seaborn.scatterplot() 还可以指定散点的大小所表示的维度

1
sns.scatterplot(x=df['open/mean(close,5)'],y=df['pred_label'], s=10**2, data=df, ax=ax, size=df["close/mean(close,20)"])


散点图矩阵

当想要考察多个变量之间的相关关系时,可以使用散点图矩阵。

  • 方法1:seaborn.pairplot() 方法
1
sns.pairplot(data=df, vars=columns)

sns.pairplot 可以给 hue 参数指定一个分类型变量,散点图的点颜色可以持有该变量的信息

1
2
df["pred_label_bin"] = pd.qcut(df["pred_label"], 3)
sns.pairplot(data=df, hue="pred_label_bin", vars=columns)

  • 方法2:seaborn.PairGrid()
1
2
g = sns.PairGrid(df[columns])
g = g.map(plt.scatter)

控制变量子集

1
g = sns.PairGrid(iris, vars=["pred_label", "open/close", "close/mean(close,20)"], height=3)

绘制对角线和非对角线的图形

1
2
g.map_diag(plt.hist)  # 指定对角线绘图类型为直方图
g.map_offdiag(plt.scatter) # 指定非对角线绘图类型为散点图

上三角与下三角使用不同函数

1
2
3
g = g.map_upper(plt.scatter)
g = g.map_lower(sns.kdeplot, cmap="Blues_d")
g = g.map_diag(sns.kdeplot, linewidth=3, legend=True)

为每个分类级别使用不同的颜色和标记

1
2
3
4
5
df["pred_label_bin"] = pd.qcut(df["pred_label"], 3)
g = sns.PairGrid(iris, hue="red_label_bin", palette="BuGn_r",
hue_kws={"marker": ["o", "s", "D"]})
g = g.map(plt.scatter, linewidths=1, edgecolor="w", s=40)
g = g.add_legend()

完整例子代码

1
2
3
4
5
6
7
8
df["pred_label_bin"] = pd.qcut(df["pred_label"], 3)
g = sns.PairGrid(df, vars=["pred_label", "close/open", "close/mean(close,20)"]
,hue="pred_label_bin"
,hue_kws={"marker": ["o", "s", "D"]}
)
g.map_diag(plt.hist)
g.map_upper(plt.scatter)
g.map_lower(sns.kdeplot, cmap="Blues_d")

  • 方法3: pd.plotting.scatter_matrix
1
pd.plotting.scatter_matrix(df[columns].iloc[:,[0,7,8,12,14]], diagonal='kde', color='k')


Share