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

前言

怎么用图表对比前后变化?用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

图像

数据可视化50图(十一) —— 宝可梦mega前后能力梯形图_第1张图片
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后的速度变化。

数据可视化50图(十一) —— 宝可梦mega前后能力梯形图_第2张图片
112.png

下期预告

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

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

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

上期内容:

你可能感兴趣的:(数据可视化50图(十一) —— 宝可梦mega前后能力梯形图)