matplotlib、seaborn 绘制多图-函数编写思路
对于这种不常用,但有时候做分析又会用的到,因为绘图用的少,总是会在生产中被卡壳。谨以此记录python 的漫漫路
源代码是在jupyter-lab上面写的,为了方便阅读,就全部放在了一起。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
### 查看分类数据的不同属性值的表现差异
rn = np.random.randn(100,2)
rn1 = np.random.randint(10,size=(100,2))
# 造数据, 这个环节随便造, 当时是想到哪儿写到哪儿
rndf = pd.DataFrame(data=rn,columns=['r1','r2'])
rndf['flg'] = 'bad'
rndf1 = pd.DataFrame(data=rn1,columns=['r1','r2'])
rndf1['flg'] = 'god'
rnd = pd.concat([rndf,rndf1])
rnd['r3'] = np.random.randint(10,size=(200,1))
rnd['r4'] = np.random.randint(low=-10, high=10, size=(200,1))
rnd['r5'] = np.random.randint(low=10, high=100, size=(200,1))
rnd['r6'] = np.random.randint(low=60, high=100, size=(200,1))
rnd['r7'] = np.random.randint(low=-100, high=100 ,size=(200,1))
# 重点编写函数
def show_graph(df, lst):
"""
批量绘制box分布图形, 适用于分类标签的不同指标值的分布数据查看, 对于指标值很多的时候比较适用
df : DataFrame数据
lst : 需要绘制图形的字段
"""
sns.set()
fig = plt.figure(figsize=(16,10)) # 这里的画布大小还是先设置好吧。
for i in range(len(lst)):
# 遍历每张子图
ax = fig.add_subplot(2, 4, i + 1)
sns.boxplot(x='flg', y=lst[i], hue='flg', data=rnd, ax=ax, meanline=True, showmeans=True, )
# 单独设置了每个子图的标题, 为了方便查看, 也可以省略
ax.set_title(lst[i]+'_index_contrast')
# 设置子图之间的横纵边距, 不然会挤到一块, 影响阅读
plt.subplots_adjust(wspace=0.3,hspace=0.3)
# 函数调用
cols = []
# 提取需要绘图的字段, 遍历所有字段, 做下判断收入即可
for ls in list(rnd.columns.unique()):
if ls.startswith('r'):
cols.append(ls)
show_graph(df=rnd, lst=cols)
plt.savefig('boxplots.png',dpi=1000)
# 下图为保存在本地的图片