分布图有超过15个例子,主要研究了总用800值精灵,18种主属性的数量,和对应的能力值分布。头条不能插入表格,数据表见文后链接。
例20 连续分布直方图
# Prepare data df=df_raw[df_raw["Generation"]<4] x_var = 'Total' groupby_var = 'Type 1' df_agg = df.loc[:, [x_var, groupby_var]].groupby(groupby_var) vals = [df[x_var].values.tolist() for i, df in df_agg] # Draw plt.figure(figsize=(20,9), dpi= 80) colors = [plt.cm.Spectral(i/float(len(vals)-1)) for i in range(len(vals))] n, bins, patches = plt.hist(vals, 30, stacked=True, density=False, color=colors[:len(vals)])
图像解释
- 例如最右边780个体值这一列一共五个宝可梦,分别为龙,草2,超能力,水。
- 不同颜色对应不同属性;
- Y轴 一种颜色的高度表示这个属性的宝可梦数量。
- X轴 一个条的宽度表示这个区间的能力值。
代码解析
“# Prepare data”
选取前三代386只宝可梦作为总样本,计算各个属性的个数
“ # Draw”
- plt.figure 设置画布的大小,不合适的大小会造成图片比例不合适很难看。
- figsize=(20,9), dpi= 80 表示 20x9 每个像素高度为80 也就相当于1600x720的分辨率
- plt.cm.Spectral matlib中的颜色映射 matplotlib 包种有很多配好的颜色组合 表示(B,G,R,A)4各通道的数列;其中BGRA都是0-1之间的小数。
- plt.hist() 直方图。
- 本文省略了标注的代码,需要代码可以上我的github看看。
# Prepare data df=df_raw[df_raw["Generation"]==1] x_var = 'Stage' groupby_var = 'Type 1' df_agg = df.loc[:, [x_var, groupby_var]].groupby(groupby_var) vals = [df[x_var].values.tolist() for i, df in df_agg] # Draw plt.figure(figsize=(7,10), dpi= 80) colors = [plt.cm.Spectral(i/float(len(vals)-1)) for i in range(len(vals))] n, bins, patches = plt.hist(vals, df[x_var].unique().__len__(), stacked=True, density=False, color=colors[:len(vals)])
图像解释
X轴 表示 1,2,3,Mega阶段的进化,Y轴 表示数量。不颜色表示不同的主属性。本图数据为第一代151只宝可梦。
例 22 进化阶段能力值分布密度图# Draw Plot plt.figure(figsize=(16,10), dpi= 80) sns.kdeplot(df.loc[cyl == 1, cty], shade=True, color="g", label="Stage=1", alpha=.7) sns.kdeplot(df.loc[cyl == 2, cty], shade=True, color="deeppink", label="Stage=2", alpha=.7) sns.kdeplot(df.loc[cyl == 3, cty], shade=True, color="dodgerblue", label="Stage=3", alpha=.7) sns.kdeplot(df.loc[cyl == 4, cty], shade=True, color="orange", label="Stage=Mega", alpha=.7)
图像解释
- X轴 表示 个体值,
- Y轴 表示数量。不颜色表示不同的主属性。
- 颜色 表示 绿色1阶段,粉色2阶段,蓝色3阶段,Mega阶段的进化,
- 本图数据为第一代151只宝可梦。
- 可以看出,每次进化总体上能力值是上涨的。而且有些能力区间被避开了。
colors = [plt.cm.Spectral(i/float(len(type_list)-1)) for i in range(len(type_list))] for i,color in zip(type_list,colors): sns.kdeplot(df.loc[cyl == i, cty], shade=True, color=color, label=f"{i}", alpha=.7)
图像解释
- X轴 表示 个体值,
- Y轴 表示数量。百分比。比如虫系红色曲线,200这个能力值约占总宝可梦数量的0.002
- 颜色 表示 6种属性 虫,龙,电,妖精,格斗,火,
- 本图数据为第一代151只宝可梦。其中6种属性
- 不同曲线整体包括的面积就是所有该属性的总宝可梦数量
colors = [plt.cm.Paired(i/float(len(type_list)-1)) for i in range(len(type_list))] for i,color in zip(type_list,colors): sns.distplot(df.loc[cyl == i, cty], color=color, label=f"{i}",hist_kws={"alpha":.7},kde_kws={'linewidth':3})
图像解释
- X轴 表示 个体值,
- Y轴 表示数量。 曲线表示对直方图的光滑拟合。实际的数值是直方图表示的数值。
- 颜色 表示 4种属性
- 本图数据为第一代151只宝可梦。其中6种属性
- 不同曲线整体包括的面积就是所有该属性的总宝可梦数量
提出一个问题,可以看出这种密度图在变量多的时候会显得十分凌乱。特别是数值接近的时候。那么我们该如何解决?
例24 赛道与分布import joypy #安装joypy fig, axes = joypy.joyplot(df, column=["HP","Speed"], by="Type 1", ylim='own',figsize=(14,20))
图像解释
- X轴 数值大小,
- Y轴 所占数量的比例
- 赛道,表示其中18种属性。
- 颜色 橘黄色表示速度,蓝色表示HP
- 本图数据为第一代151只宝可梦
- 不同曲线整体包括的面积就是所有该属性的总宝可梦数量
- 例如:幽灵系中,HP(蓝色)大部分比速度(黄色)低。
有了最后一个赛段分布,个个系的能力取舍就一目了然了。
下期预告宝可梦属性与个体值的分布 2 —— 箱图与小提琴图
完整代码见我的github:ub3132003/pynotebook/plot/50grap
数据表格地址:https://raw.githubusercontent.com/ub3132003/pynotebook/master/data/pokemon.csv
灵感来自: machinelearningplus 感谢b站UP "菜菜TsaiTsai" 分享这个博客.
上期内容: 数据可视化50图(十二) —— 宝可梦mega前后排行分级哑铃图
如何运行代码教程:数据分析50图(前8例总结) —— 宝可梦能力值可视化
,