和之前学习Pandas一样,我们继续以宝可梦数据集作为学习可视化的例子,进而梳理Python绘图的基本操作,主要涉及seaborn以及matplotlib两个可视化库。
上半篇我们主要使用matplotlib来进行柱状图、散点图、饼图折线图等的绘制,下半篇主要使用seaborn来进行箱线图、小提琴图、分簇散点图、热力图等的绘制。本文是上半篇。
首先我们回顾一下整个数据集,列名依次为名字、类型一、类型二、总计值、血量、攻击、防御、特殊攻击、特殊防御、速度、代目、是否为神兽。
柱状图
将宝可梦按照血量的分布来做直方图的统计,可以看到血量40-80是出现频数最高的,宝可梦的血量频数以60-80为中心,向两边递减。
bins=range(0,200,20)
plt.hist(df['HP'],bins,histtype="bar")
plt.xlabel('HP')
plt.ylabel('count')
plt.plot()
我们将前15只宝可梦的特殊攻击和攻击数值一起绘制,并且将其各自的均值绘制成线。
plt.bar(df.index[:15], df['Sp.Atk'][:15],0.2,label="Sp.Atk", color="#87CEFA")
plt.bar(df.index[:15]+0.2, df['Attack'][:15],0.2,label="Attack", color="red")
plt.axhline(df['Attack'][:15].mean(),linestyle='solid',color='red')
plt.axhline(df['Sp.Atk'][:15].mean(),linestyle='dashed',color='#87CEFA')
plt.xlabel("Pokemon index")
plt.ylabel("Attack value")
plt.legend()
散点图
我们知道宝可梦的水系和火系是存在克制关系的(并且这两种宝可梦的种类相对较多),那么这些类型的宝可梦在各项能力数值方面是否存在一定的关系,我们通过散点图的方式来可视化火系与水系防御和攻击属性。
fire=df[(df['Type 1']=='Fire')|(df['Type 2']=='Fire')]
water=df[(df['Type 1']=='Water') | (df['Type 2']=="Water")]
plt.scatter(fire.Attack.head(50),fire.Defense.head(50),color='R',label='Fire',marker="*",s=50)
plt.scatter(water.Attack.head(50),water.Defense.head(50),color='B',label='Water',s=50)
plt.xlabel("Attack")
plt.ylabel("Deffence")
plt.legend()
plt.plot()
可以看到的是火系的宝可梦主要分布在副对角线的下方,其攻击相对较高,但防御相对较低。
饼图
按照宝可梦的类型一来做占比统计,因为种类数过多,这里采用将占比低的种类全部记作‘Others’,这里explode可以将某块分割出来。
labels=list(df['Type1'].value_counts().index[:8])
labels.append("Others")
sizes=list(df['Type1'].value_counts().values[:8])
sizes.append(sum(df['Type1'].value_counts().values[8:]))
explode=(0.1,0,0,0,0,0,0,0,0)
plt.pie(sizes,labels=labels,explode=explode,autopct='%1.1f%%',startangle=90)
# x,y轴刻度设置一致,保证饼图为圆形
plt.axis('equal')
plt.title("Percentage of Different Types of Pokemon")
折线图
我们通过折线图来表现不同代目的宝可梦类型数目变化情况,可以看到水系宝可梦数目逐渐减少,龙系在三代目才首次出现。
df4=df.groupby(['Generation','Type1']).count().reset_index()
df4=df4[['Generation','Type1','Total']].pivot('Generation','Type1','Total')
df4[['Water','Fire','Grass','Dragon','Electric']].plot()
plt.show()
——END——
推荐阅读