前言
怎么用图表对比前后变化?用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 |
图像
解析
代码解析
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后的速度变化。
下期预告
哑铃图Dumbbell Plot —— 宝可梦mega前后能力增长对比2
数据表格地址:https://raw.githubusercontent.com/ub3132003/pynotebook/master/data/pokemon.csv
灵感来自: machinelearningplus 感谢b站UP "菜菜TsaiTsai" 分享这个博客.
上期内容: