目录
Matplotlib 初识
Matplotlib 是 Python 中常用的 2D 绘图库,它能轻松地将数据进行可视化,作出精美的图表。
本地环境需要使用 pip install matplotlib 进行安装。
Matplotlib 这个模块很庞大,最常用的是其中一个子模块——pyplot,通常这样导入它:
import matplotlib.pyplot as plt
pyplot 中最基础的作图方式是以点作图,即给出每个点的坐标,pyplot 会将这些点在坐标系中画出,并用线将这些点连起来。
例如:我们用pyplot画一个正弦函数图
结果:
我们以上面的代码为例进行基本的说明:
第一行代码(x = np.arange(0, 2 * np.pi, 0.1)):代表生成一个范围是0到2Π步长为0.1的数组。
步长越小,每个点间隔小一点,点的数量多一点。这样画出的图像更加接近真实情况,也更加的平滑。
第二行代码(y = np.sin(x)):np.sin() 方法是 numpy 中计算正弦函数的方法,我们将 x 的值传进去就得到对应的正弦值。
除了 np.sin() 方法之外,numpy 中也有 np.cos()、np.tan() 等计算三角函数的方法。
第三行代码(plt.plot(x, y))【核心代码
】:有了 x 和 y 的值之后,将其分别传入 plt.plot() 方法,pyplot 会将其转换成对应的坐标。将这些坐标连成线就得到了函数的图像.
第四行代码(plt.show()):要想图像能显示就必须在最后调用plt.show()。
注意:plt.plot() 方法接收任意对数的 x 和 y,它会将这些图像在一张图上都画出来。
例如:我现在可以继续在那张图上画一个余弦函数的图像
代码实现:
结果:
当然你也可以每对 x 和 y 都调用一次 plt.plot() 方法,这也没毛病:
结果同上。
注意:不要看到调用了两次plt.plot()就认为画在了两张图上面,仍是在一张图上!
格式化参数
plt.plot()中,对于每一对x,y都可以传入一个可选的格式化参数,用来指定线条的颜色、点标记和线条的类型。
例如:
结果:
以 ‘ro–’ 为例,它分为 3 部分:r 代表红色(red),o 代表的是圆点标记,-- 代表着虚线。ro-- 的意思就是线条为红色虚线、坐标点标记为圆点。
格式化参数的这 3 部分都是可选的,也没有顺序要求。你可以只传入一个 ‘r’ 来指定颜色,也可以写成 --or。格式化参数的每部分都有很多选项,因此能形成很多组合,下图列出了格式化参数常用的选项及其含义:
小贴士:代表颜色的字母都是对应英文单词的首字母,黑色除外,因为黑色和蓝色首字母都是 b,因此黑色用尾字母 k 表示。
数据展示是一种分析方法
既然我们通过数据分析来进行决策,那么使用合适的图表来准确地展示数据是至关重要的。要做到这一点,首先你要理解每种图表的表达方式及其适用场景。然后,根据要分析的目标选择合适的图表类型。除了折线图、柱状图、饼图等我们习以为常的图表类型,还有很多实用的图表类型。所以在绘制图表之前,我们要先了解各种图表类型的适用场景。
实际使用中,我们会用到各种各样的几十种图表。按照数据展示的目标可以把它们分为五种,分别是:趋势、比较、构成、分布和联系。
这五种类型的区别:
趋势:这是最常见的一种时间序列关系,关心数据如何随着时间变化,趋势类里的图表能直观反映出每年、每月、每天的变化趋势,增长、减少、上下波动还是基本不变。最常见的是折线图,它能很好地表现指标随时间呈现的趋势。
构成:主要关注每个部分占整体的比例,如果你想分析的目标诸如“份额”、“百分比”等。展示构成关系的图表类型里,最常见的就是饼图。
比较:可以展示某个维度上的排列顺序,分析某维度之间的对比是差不多,还是 “大于”、“小于”,比如分析男生和女生的身高差别。
分布:当你关心数据集中、频率、分布时,比如根据地理位置数据,通过地图来展示不同分布特征。比较常用的图表有地图、直方图、散点图。
联系:主要查看两个变量之间是否表达出我们预期所要证明的相关关系。比如预期销售额可能随着优惠折扣的增长而增长,常用于表达“与……有关”、“随……而增长”、“随……而不同”等维度间的关系。
在进行数据可视化时,要先明确分析的目标,再来选择五种分类的适合分类,最后选择某个分类里面合适的图表类型。我们要努力让图表更容易被解读,清晰地看到数据背后隐藏的奥秘!
绘制折线图
首先我们要明确要想绘制折线图我们的做法还是描点
,那么我们就可以使用到前面提到的方法plt.plot(),不过要发生一些小的改变,在画曲线图的时候我们传入的是x,y坐标点,此次画折线图传入的x 和 y 分别是时间点和对应的数据。
例如:
结果:
上面是某商品一周的销量走势。x 轴传入时间,y 轴传入对应的销量
因为图中有中文,所以需要通过 plt.rcParams[‘font.family’] = [‘Noto Sans CJK JP’] 来设置中文字体,否则中文将会乱码。
Noto Sans CJK JP
在你的本地环境不一定适用,你可以通过如下代码打印出已经安装的字体,找到其中的中文字体名称替换掉 Noto Sans CJK JP 即可,例如 SimHei(黑体)等。
你也可以直接c盘 --> windows --> Fonts 找到你电脑上已经下载好的字体。选好字体之后查看其属性,找到xxx.TTF,再用xxx替换也可以。
我也可以将多个商品的销量走势画在一张图上进行对比,只需调用两次 plt.plot() 方法即可。
结果:
添加图例
同时我们可以添加图例,帮助我们区分两条曲线。
做法:在调用 plt.plot() 方法时传入 label 参数,接着调用 plt.legend() 方法显示图例即可。
例如:
注意:这个有的人可能也想把两个合并写到一起,就像
plt.plot(x, y1, label=‘商品 A’,x, y2, label=‘商品 B’)这肯定是错的,因为关键字参数一定是在位置参数的后面的!就算你再把前面的label放到后面去,也会出现参数重复的错误。我们还可以看到,图例被放在了图表的左上方,图例位置其实是可以设置的,不设置的情况下 matplotlib 会帮你自动找一个合适的位置放置。如果想自行选择图例位置的话可以通过 plt.legend() 方法的 loc 参数实现,loc 参数共有如下 11 种方式可供选择:
添加轴的标签以及图标标题
我们还可以通过 plt.xlabel() 和 plt.ylabel() 方法来设置 x 轴和 y 轴的标签,还能通过 plt.title() 给图表设置标题
例如:
结果:
柱状图,饼图,以及子图的绘制请看下篇