宝可梦分布8张图,统计占比的时候别再画饼图了

                       宝可梦分布8张图,统计占比的时候别再画饼图了                                                    
                                                                      ——数据可视化50图(十四)

前言

本文主要研究了总用800值精灵,18种主属性的数量,和对应的能力值分布。并用50张图表从不同角度分析个个数据之间的关系。头条不能插入表格,数据表见文后链接。

本期展示7种分布比较图:赛道分布;箱图;箱点图;赛艇图/小提琴图;金字塔图。曲奇饼干图,披萨饼图,地砖图。

![141.png](https://upload-images.jianshu.io/upload_images/16673634-c12e79be1f477b2f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
#导入数据
df_raw=pd.read_csv(r'https://raw.githubusercontent.com/ub3132003/pynotebook/master/data/pokemon.csv')

例24 赛道分布点图

# Draw horizontal lines
fig, ax = plt.subplots(figsize=(16,10), dpi= 80)
ax.hlines(y=df.index, xmin=0, xmax=800, color='gray', alpha=0.5, linewidth=.5, linestyles='dashdot')

# Draw the Dots
for i, make in enumerate(df[manufacturer]):
    df_make = df_raw.loc[df_raw[manufacturer]==make, :]
    ax.scatter(y=np.repeat(i, df_make.shape[0]), x=cty, data=df_make, s=75, edgecolors='gray', c='w', alpha=0.5)
    ax.scatter(y=i, x=cty, data=df_median.loc[df_median.index==make, :], s=75, c='firebrick')
141.png
图像解释

赛道图在第十期出平均能力排行中出现过,赛道的作用让不同分组的次序一目了然

  • 点表示该位置出现的单个个体,颜色越深表示出现越密集。红点是中位数位置。

  • 不同颜色对应不同属性;

  • Y轴 18种主属性。

  • X轴 能力值100-800范围。

例 25 箱图

# Import Data
df = df_raw#[df_raw["Generation"]==1]
x="Type 1"
y='Total'
# Draw Plot
plt.figure(figsize=(24,10), dpi= 80)
sns.boxplot(x=x, y=y, data=df, notch=False)

# Add N Obs inside boxplot (optional)
def add_n_obs(df,group_col,y):
    medians_dict = {grp[0]:grp[1][y].median() for grp in df.groupby(group_col)}
    xticklabels = [x.get_text() for x in plt.gca().get_xticklabels()]
    n_obs = df.groupby(group_col)[y].size().values
    for (x, xticklabel), n_ob in zip(enumerate(xticklabels), n_obs):
        plt.text(x, medians_dict[xticklabel]*1.01, "num:"+str(n_ob), horizontalalignment='center', fontdict={'size':15}, color='white')

add_n_obs(df,group_col=x,y=y)    
142.png
图像解释
  • 与刚才的箱图相同不同的是用颜色标记进化的阶段。
  • 0表示退化,比如皮卡丘的宝宝退化皮丘就被记作0阶段进化。还有小卡比,小电击兽等
  • 4表示mega进化
  • 可以看出水,火,草 御三家很多都有三阶段进化,此外岩石系也是3进化较多的。
  • 结合箱图和散点图,点能够看到该y值上具体有多少个值

例 26 箱点图

x="Type 1"
y='Total'
df = df_raw[df_raw["Generation"]<3]
plt.figure(figsize=(24,10), dpi= 80)
sns.boxplot(x=x, y=y, data=df, hue='Stage')
sns.stripplot(x=x, y=y, data=df, color='black', size=3, jitter=1)
图像解释
  • 与刚才的箱图相同不同的是用颜色标记进化的阶段。

  • 0表示退化,比如皮卡丘的宝宝退化皮丘就被记作0阶段进化。还有小卡比,小电击兽等

  • 4表示mega进化

  • 可以看出水,火,草 御三家很多都有三阶段进化,此外岩石系也是3进化较多的。

  • 结合箱图和散点图,点能够看到该y值上具体有多少个值

143.png

例27 小提琴图/龙舟图

sns.violinplot(x=x, y=y, data=df, scale='width', inner='quartile')
144.png
图像解释
  • 宽度表示对应y轴的数量,越宽表示数量越多;比如第一个草系宝可梦,大部分都在300-500的个体值,超过600和低于200的都比较少。
  • 宝可梦分布比较平均,如果有一段值特别多那么这个图会看起来像个小提琴。这里看起来像个龙舟。

例28 金字塔图

# Read data
df = pd.read_csv(r"..\data\pokemon_2.csv")
# Draw Plot
plt.figure(figsize=(13,10), dpi= 80)
group_col = 'Generation'
order_of_bars = df.Stage.unique()
colors = [plt.cm.Spectral(i/float(len(df[group_col].unique())-1)) for i in range(len(df[group_col].unique()))]

for c, group in zip(colors, df[group_col].unique()):
    print(group)
    sns.barplot(x='count', y='Stage', data=df.loc[df[group_col]==group, :], order=order_of_bars, orient='h',color=c, label=group)
145.png
图像解释
  • 特别适合表示阶段逐级增长的数据,比如网购时候,浏览,收藏,购买数据也是逐级的。
  • X轴 负值表示二世代宝可梦数量,正值表示一世代宝可梦数量,
  • Y轴 进化阶段。0阶段是宝宝退化。比如皮卡丘退化皮丘。
  • 颜色 表示 4种属性
  • 数据为第一代和第二代,251只宝可梦
函数解释 sns.barplot,画条状图
  • order=order_of_bars 需要按数量顺序方砖块,不然看起来就不像金字塔了。
  • orient='h' 水平画,‘v’ 则是垂直画

中场休息,你怎么只会画饼图

加入你在一家电商公司。老板让你统计一下app,网站,微信的产品购买占比。然后你做了一个饼图。老板又让你统计下,食品、日用品、电器的销售额占比。然后你画了一个饼图。于是你的ppt出现了5、6张饼图。老板怒了曰:你家是卖饼的吗?看完我下面的文章你就不会再挨骂了。

例29 曲奇饼图

from pywaffle import Waffle
# Import
df=df_raw #
class1="Generation"
class2="Type 1"
# Draw Plot and Decorate
fig = plt.figure(
    FigureClass=Waffle,
    plots={
        '211': {
            'values': df['counts'],
            'labels': [f"{n[0]} ({n[1]})" for n in df[[class1, 'counts']].itertuples()],
            'legend': {'loc': 'upper left', 'bbox_to_anchor': (1.05, 1), 'fontsize': 12},
            'title': {'label': '# Vehicles by Class', 'loc': 'center', 'fontsize':18}
        },
        '212': {
            'values': df_make['counts_make'],
            'labels': ["{1}".format(n[0], n[1]) for n in df_make[[class2, 'counts_make']].itertuples()],
            'legend': {'loc': 'upper left', 'bbox_to_anchor': (1.05, 1), 'fontsize': 12, 'title':'Manufacturer'},
            'title': {'label': '# Vehicles by Make', 'loc': 'center', 'fontsize':18},
            'colors': colors_make
        }
    },
    rows=18,
    colors=colors,
    figsize=(16, 9)
)
146.png
图像解释
  • 一小格表示一个宝可梦
函数解释
  • 第一次使用需要安装pywaffle 包。 命令行输入。pip install pywaffle
  • '211': { 共2行一列,第一张图
  • colors 复习颜色映射的使用方法plt.cm.Set3(num),cm获取颜色对象。让后构造(r,g,b,a)为元素的数列

例 30 饼图

x="Type 1"
# Prepare Data
df = df_raw.groupby(x).size()

# Make the plot with pandas
df.plot(kind='pie', subplots=True, figsize=(8, 8))
plt.title("宝可梦属性占比")
plt.ylabel("")
147.png
图像解释
  • 不解释

例 31披萨饼图

# Draw Plot
fig, ax = plt.subplots(figsize=(12, 7), subplot_kw=dict(aspect="equal"), dpi= 80)

data = df['counts']
categories = df[x]
explode = [0,0,0,1] #np.zeros(3, dtype = int, order = 'C')
#explode[2]=1

def func(pct, allvals):
    absolute = int(pct/100.*np.sum(allvals))
    return "{:.1f}% ({:d} )".format(pct, absolute)

wedges, texts, autotexts = ax.pie(data, 
                                  autopct=lambda pct: func(pct, data),
                                  textprops=dict(color="w"), 
                                  colors=plt.cm.Dark2.colors,
                                 startangle=140,
                                 explode=explode)
148.png
函数解释

**ax.pie() ** 画饼

  • autopct 标注文字 百分比和数量
  • lambda 表达式 pct: func(pct, data) 输入为pct 返回值是func函数的返回值
  • colors=plt.cm.Dark2.colors 自动使用颜色映射 Dark2
  • explode=explode 布尔数列,为真的位置会分离出来
  • ax.legend()标签栏

例32 地砖图

# Prepare Data
df=df_raw[pd.isnull(df_raw["Type 2"])]

df = df.groupby('Type 1').size().reset_index(name='counts')

labels = df.apply(lambda x: str(x[0]) + "\n (" + str(x[1]) + ")", axis=1)
sizes = df['counts'].values.tolist()
colors = [plt.cm.Spectral(i/float(len(labels))) for i in range(len(labels))]

# Draw Plot
plt.figure(figsize=(10,14), dpi= 80)
squarify.plot(sizes=sizes, label=labels, color=colors, alpha=.8)
149.png
图像解释
  • 数据取没有副属性的宝可梦
  • 块砖表示一种属性

结论

看了这篇文章的下次可别用饼图啦。

下期预告

宝可梦数据要告一段落了,因为之后会开启时间序列图这个系列,需要更好的展示效果

由于篇幅所限文章代码省略了数据标准化,和画板标注的代码。完整代码见我的github:https://github.com/ub3132003/pynotebook/blob/master/plot/50%20graph.ipynb

灵感来自: machinelearningplus 感谢b站UP "菜菜TsaiTsai" 分享这个博客.

上期内容:

如何运行代码教程:数据分析50图(前8例总结) —— 宝可梦能力值可视化

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,324评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,356评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,328评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,147评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,160评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,115评论 1 296
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,025评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,867评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,307评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,528评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,688评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,409评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,001评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,657评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,811评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,685评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,573评论 2 353

推荐阅读更多精彩内容