美文网首页程序员
数据可视化50图(十) —— 宝可梦mega前后能力梯形图

数据可视化50图(十) —— 宝可梦mega前后能力梯形图

作者: iced_fd13 | 来源:发表于2019-04-12 11:13 被阅读1次

    前言

    怎么用图表对比前后变化?用python试试吧。本次对比了喷火龙和超梦mega进化的前后对比。

    例16

    import matplotlib.lines as mlines
    # Import Data
    L_val=df['Defense']
    R_val=df['Defense.1']
    
    
    def newline(p1, p2, color='black'):
        ax = plt.gca()
        l = mlines.Line2D([p1[0],p2[0]], [p1[1],p2[1]], color='red' if p1[1]-p2[1] >= 0 else 'green', marker='o', markersize=6)
        ax.add_line(l)
        return l
    
    fig, ax = plt.subplots(1,1,figsize=(10.5,7.5), dpi= 80)
    
    # Vertical Lines
    for i in range(4):
        if i==2:
            continue
        ax.vlines(x=i, ymin=30, ymax=150, color='black', alpha=0.7, linewidth=1, linestyles='dotted')
    
    # Points
    ax.scatter(y=L_val, x=np.repeat(1, df.shape[0]), s=10, color='black', alpha=0.7)
    ax.scatter(y=R_val, x=np.repeat(3, df.shape[0]), s=10, color='black', alpha=0.7)
    
    # Line Segmentsand Annotation
    for p1, p2, l,r  in zip(L_val, R_val,df['Name'],df['Name.1']):
        newline([1,p1], [3,p2])
        ax.text(1-0.05, p1, l + ', ' + str(round(p1)), horizontalalignment='right', verticalalignment='center', fontdict={'size':14},rotation=0)
        ax.text(3+0.05, p2, r + ', ' + str(round(p2)), horizontalalignment='left', verticalalignment='center', fontdict={'size':14},rotation=0)
    # 'Before' and 'After' Annotations
    ax.text(1-0.05, 150, 'BEFORE', horizontalalignment='right', verticalalignment='center', fontdict={'size':18, 'weight':700})
    ax.text(3+0.05, 150, 'AFTER', horizontalalignment='left', verticalalignment='center', fontdict={'size':18, 'weight':700})
    
    # Decoration
    ax.set_title("Defense vs Mega Defense", fontdict={'size':22})
    ax.set(xlim=(0,4), ylim=(29,150), ylabel='Defense Value')
    ax.set_xticks([1,3])
    ax.set_xticklabels(["Normal", "Mega"])
    plt.yticks(np.arange(50, 150, 10), fontsize=10,rotation=60)
    plt.gca().spines["top"].set_alpha(.0)
    plt.gca().spines["right"].set_alpha(.0)
    

    数据表

    id Name Attack Defense Name.1 Attack.1 Defense.1
    0 6 Charizard 84 78 Mega Charizard X 130 111
    1 6 Charizard 84 78 Mega Charizard Y 104 78
    2 150 Mewtwo 110 90 Mega Mewtwo X 190 100
    3 150 Mewtwo 110 90 Mega Mewtwo Y 150 70

    图像

    111.png

    解析

    代码解析

    mlines.Line2D()

    matplotlib中任意执行的画法

    “# Vertical Lines”

    画垂直的辅助线,把画布4等分

    “# Points"

    标记数据点的位置

    ”# Line Segmentsand Annotation“

    画出红绿色的线段和标注文本的位置

    ”# 'Before' and 'After' Annotations“

    标注Before、After的文本位置

    ”# Decoration“

    ax.set() 设置x 坐标轴的长度,y轴长度,和名字

    plt.gca().spines["top"].set_alpha(.0) 把顶上的框线去掉

    ax.set_xticks([1,3]) 很关键 设置x轴的刻度,因为这张图x刻度不是连续的.

    图像解释

    y轴表示防御力的数值;x轴 间隔左边是mega 进化前 ,右边是mega 进化后,绿色表示增长,红色表示减少

    结论

    因为宝可梦的能力值很多都是相同的并且很少会有负增长的情况,所以梯形图在多数据的时候就显得很乱了。比如对比所有宝可梦mega后的速度变化。

    112.png

    下期预告

    哑铃图Dumbbell Plot —— 宝可梦mega前后能力增长对比2

    数据表格地址:https://raw.githubusercontent.com/ub3132003/pynotebook/master/data/pokemon.csv

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

    上期内容:

    相关文章

      网友评论

        本文标题:数据可视化50图(十) —— 宝可梦mega前后能力梯形图

        本文链接:https://www.haomeiwen.com/subject/yugqwqtx.html