程序员每天写500字每天写1000字

Matplotlib可视化

2018-12-17  本文已影响13人  弃用中

创建图与图表是很多分析项目中的一个重要步骤,它通常是项目开始时探索性数据分析(EDA)的一部分,或者在项目报告阶段向其他人介绍你的数据分析结果时使用。

matplotlib是一个绘图库,创建的图形可达到出版的质量要求。它可以创建常用的统计图,包括条形图、箱线图、折线图、散点图和直方图等等图形。

matplotlib提供了对图形各个部分进行定制的功能。例如,它可以设置图形的形状和大小、x轴与y轴的范围和标度、x轴和y轴的刻度线和标签、图例以及图形的标题。更多关于定制图形的信息请查看:https://matplotlib.org/users/beginner.html

下面,我们就开始学习一些常见图形的绘制,使用的数据来自The Complete Pokemon Dataset

先将数据导入,

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

plt.style.use('ggplot')
%matplotlib inline

data = pd.read_csv('../../Datasets/pokemon.csv')
data.head()
数据前5行

数据每一列的含义如下,


字段含义

条形图

假如我们想查看一下每一代Pokemon的数量,并用条形图显示出来,该怎么办呢?

generation = data['generation'].value_counts()
plt.bar(generation.index, generation.values)

可以看到如下结果:


每一代Pokemon数量

如果我们想添加轴标签和标题的话,加上如下内容即可:

plt.xlabel('generation')
plt.ylabel('count')
plt.title('Generation and Count')

为了方便起见,我们也可以为每个条加上数值标签,

for x,y in enumerate(generation.values):
    plt.text(x+1,y,'%s' % y,ha='center')

matplotlib.pyplot.bar函数详情:

matplotlib.pyplot.bar(x, height, width=0.8, bottom=None, *, align='center', data=None, **kwargs)

更多内容请查看:https://matplotlib.org/api/_as_gen/matplotlib.pyplot.bar.html

知道了上述参数的含义之后,我们就可以对之前的图形进行小小的改动啦!

generation = data['generation'].value_counts()
plt.bar(generation.index, generation.values, facecolor='orange',edgecolor='green', linewidth=2)
plt.xlabel('generation')
plt.ylabel('count')
plt.title('Generation and Count')

for x,y in enumerate(generation.values):
    plt.text(x+1,y,'%s' % y,ha='center')

箱线图

箱线图一般用来展示数据的分布(如上下四分位数、中位数等),同时,也可以用来反映数据的异常情况。

box = data[['defense','attack','hp']]
plt.boxplot(box.values)
plt.setp(plt.gca(),xticklabels=['defense','attack','hp'])

matplotlib.pyplot.boxplot函数详情:

matplotlib.pyplot.boxplot(x, notch=None, sym=None, vert=None, whis=None, positions=None, widths=None, patch_artist=None, bootstrap=None, usermedians=None, conf_intervals=None, meanline=None, showmeans=None, showcaps=None, showbox=None, showfliers=None, boxprops=None, labels=None, flierprops=None, medianprops=None, meanprops=None, capprops=None, whiskerprops=None, manage_xticks=True, autorange=False, zorder=None)

更多内容请查看:https://matplotlib.org/api/_as_gen/matplotlib.pyplot.boxplot.html

折线图

我们不妨查看一下每一代Pokemon攻击力的走势,

generation_attack = data.pivot('name', 'generation', 'attack').fillna(0)
for col in generation_attack.columns:
    gene = generation_attack[generation_attack[col] > 0][col].sort_values()
    plt.plot(range(gene.shape[0]),gene.values,label=col)
plt.legend()
plt.ylabel('Attack')

matplotlib.pyplot.plot函数详情:

matplotlib.pyplot.plot(*args, scalex=True, scaley=True, data=None, **kwargs)

更多内容请查看:https://matplotlib.org/api/_as_gen/matplotlib.pyplot.plot.html

散点图

将防御力和攻击力用散点图绘制出来,

plt.scatter(data['attack'], data['defense'])
plt.xlabel('attck')
plt.ylabel('defense')

matplotlib.pyplot.scatter函数详情:

matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, verts=None, edgecolors=None)

更多内容请查看:https://matplotlib.org/api/_as_gen/matplotlib.pyplot.scatter.html

直方图

将防御力的分布用直方图绘制,

plt.hist(data['defense'],bins=25)
plt.xlabel('Defense')
plt.ylabel('Frequency')

matplotlib.pyplot.hist函数详情:

matplotlib.pyplot.hist(x, bins=None, range=None, density=None, weights=None, cumulative=False, bottom=None, histtype='bar', align='mid', orientation='vertical', rwidth=None, log=False, color=None, label=None, stacked=False, normed=None)

更多内容请查看:https://matplotlib.org/api/_as_gen/matplotlib.pyplot.hist.html

饼图

接下来,我们可以看一下幻之宝可梦所占的比例,

color = ["aqua", "orange"]
leg = [data[data['is_legendary'] == 0].shape[0],data[data['is_legendary'] == 1].shape[0]]
legPie = plt.pie(leg,labels=['Non Legendary', 'Legendary'],colors=color,shadow=True,
                autopct='%1.1f%%',startangle=45,explode=(0,0.1))

matplotlib.pyplot.pie函数详情:

matplotlib.pyplot.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=None, radius=None, counterclock=True, wedgeprops=None, textprops=None, center=(0, 0), frame=False, rotatelabels=False)

更多内容请查看:https://matplotlib.org/api/_as_gen/matplotlib.pyplot.pie.html

如果感觉意犹未尽的话,可以到:https://matplotlib.org/gallery/index.html

学习各种图的绘制。

万一这都满足不了你对可视化的追求的话,可以参考10 Useful Python Data Visualization Libraries for Any Discipline学习。

参考:

[1] https://liam.page/2014/09/11/matplotlib-tutorial-zh-cn/

[2] https://blog.csdn.net/ScarlettYellow/article/details/80458797

[3] https://wizardforcel.gitbooks.io/matplotlib-user-guide/content/

[4] https://blog.csdn.net/qq_34337272/article/details/79555544

[5] https://matplotlib.org/tutorials/index.html

上一篇 下一篇

猜你喜欢

热点阅读