python第三方库01:matplotlib接口和常用图像


前言

读完全文,一定会掌握matplotlib的用法,let’s go!本文包括图像的保存,导入库,线型图,直方图,散点图,饼图等,基本上能用到的都会涉及!


提示:以下是本篇文章正文内容,下面案例可供参考

一、基本操作

1.1导入matplotlib库

和numpy,pandas一样,在导入matplotlib时我们也可以用一些常用的简写形式:其中pyplot是最常用的画图模块接口,功能非常强大。

import matplotlib
import matplotlib.pyplot as plt

1.2保存图片

matplotlib还可以直接将图像保存文件,通过plt.savefig(“test.jpg”)命令保存文件。

plt.savefig("test.jpg")

1.3画图接口

matplotlib有两个画图接口:一个是便捷的matlab风格接口,另一个是功能更强大的面向对象接口。

matplotlib的matlab接口许多语法都和MATLAB类似,所以使用过MATLAB的朋友们想必很快就能上手matplotlib。如下面的例子,学过matlab的朋友,很明显发现跟matlab语法基本一致,只是多了plt.这一部分。

import matplotlib.pyplot as plt#导入模块
plt.figure(figsize=(10,10))#创建图形,并设置大小为10 x 10
plt.subplot(2,1,1)#创建子图1(行,列,子图编号)
plt.plot([1,2,3,4], [1,2,3,4])
plt.subplot(2,1,2)#创建子图2(行,列,子图编号)
plt.plot([4,3,2,1], [1,2,3,4])
plt.show()

运行结果如下图:
在这里插入图片描述
面向对象接口可以适应更加复杂的场景,更好地控制图形,在画比较复杂的图形市,面向对象方法会更方便。通过下面的代码,可以用面向对象接口重新创建之前的图形。(这部分我也没有怎么用到,先挖个坑)
将上面的例子换成面向对象方法的代码如下:

fig,ax=plt.subplots(2)#ax是一个包含2个axes对象的数组
ax[0].plot([1,2,3,4], [1,2,3,4])
ax[1].plot([4,3,2,1], [1,2,3,4])
plt.show()

二、线性图

使用场景:折线图适合二维的大数据集,尤其是那些趋势比单个数据点更重要的场合。它还适合多个二维数据集的比较
学习掌握matplotlib的图形线形图,并能够使用线形常用配置。本部分包含两部分:1.如何绘制线形图,2.如何为线形图设置颜色风格和坐标轴。

2.1 绘制线性图

简单的汇总线性图在第一部分的举例中已经有所涉及。下面具体的写一写代码的具体意义。
在Matplotlib中,figure(plt.Figure类的一个实例)可以被看成是个能够容纳各种坐标轴、图形、文字和标签的容器。就像你在图中看到的那样,axes(plt.Axes类的一个实例)是一个带有刻度和标签的矩形,最终会包含所有可视化的图形元素。
代码如下(示例):

import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = plt.axes()
x = np.linspace(0, 10, 1000)
ax.plot(x, np.sin(x))
plt.show()

在这里插入图片描述
也可以使用pylab接口画图,这时图形与坐标轴都在底层执行,执行结果和上图一样:plt.plot(x, np.sin(x))
下图中连续使用plot,可以发现图中出现了两个图像,sin和cos。

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

#fig = plt.figure()
#ax = plt.axes()
x = np.linspace(0, 10, 1000)
#ax.plot(x, np.sin(x))
plt.plot(x, np.sin(x))
plt.plot(x, np.cos(x))
plt.show()

在这里插入图片描述## 2.

2.不同线条的设置

在进行实验过程中,有时候我们想要多条数据,并希望通过不同的曲线设置来进行区分,那么如何控制颜色和线条的形式?

在画图的过程中通常对图形的第一次调整是调整它线条的颜色与风格。

plt.plot()函数可以通过相应的参数设置颜色和风格,修改颜色使用color参数,它支持各种颜色值的字符串,具体使用如下:

代码如下(示例):

plt.plot(x, np.sin(x - 0), color='blue') # 标准颜色名称
plt.plot(x, np.sin(x - 1), color='g') # 缩写颜色代码(rgbcmyk)
plt.plot(x, np.sin(x - 2), color='0.75') # 范围在0~1的灰度值
plt.plot(x, np.sin(x - 3), color='#FFDD44') # 十六进制(RRGGBB,00~FF)
plt.plot(x, np.sin(x - 4), color=(1.0,0.2,0.3)) # RGB元组,范围在0~1
plt.plot(x, np.sin(x - 5), color='chartreuse') # HTML颜色名称

如果不指定颜色,matplotlib会为多条线自动循环使用一组默认的颜色。

plt.plot(x, x + 4, linestyle='-') # 实线
plt.plot(x, x + 5, linestyle='--') # 虚线
plt.plot(x, x + 6, linestyle='-.') # 点划线
plt.plot(x, x + 7, linestyle=':') # 实点线

还可以将两者叠加起来:

plt.plot(x, x + 0, '-g') # 绿色实线
plt.plot(x, x + 1, '--c') # 青色虚线
plt.plot(x, x + 2, '-.k') # 黑色点划线
plt.plot(x, x + 3, ':r'); # 红色实点线

2.3坐标轴的选择和标题

图形标签与坐标轴标题是最简单的标签

plt.plot(x, np.sin(x))
plt.title("正弦函数")
plt.xlabel("x")
plt.ylabel("sin(x)")

3散点图

散点图适用二维或三维的数据集。比如相关性分析、 数据分布情况。

3.1plot绘制散点图

散点图也是在数据科学中常用图之一,同样的,现在用前面学过的函数来画散点图:

x = np.linspace(0, 10, 30)
y = np.sin(x)
plt.plot(x, y, 'o', color='black')

在这里插入图片描述
plt.plot函数非常灵活,可以满足各种不同的可视化配置需求。关于具体配置的完整描述,由于篇幅有限,请参考plt.plot文档,这里就不多介绍了,大家多多尝试就好。

3.2scatter画散点图

另一个可以创建散点图的函数是plt.scatter。它的功能非常强大,其用法与plt.plot函数类似:

x = np.linspace(0, 10, 30)
y = np.sin(x)
plt.scatter(x, y, marker='o');

plt.scatter和plt.plot的主要差别在于,前者在创建散点图时具有更高的灵活性,可以单独控制每个散点与数据匹配,也可以让每个散点具有不同的属性(大小、颜色等)
接下来画一个随机散点图,里面有各种颜色和大小的散点。为了能更好的显示重叠部分,用alpha参数来调整透明度:

r = np.random.RandomState(0)
x = r.randn(10)
y = r.randn(10)
colors = r.rand(10)
sizes = 1000 * r.rand(10)
plt.scatter(x, y, c=colors, s=sizes, alpha=0.3,
cmap='viridis')
plt.colorbar() # 显示颜色条
plt.show()

在这里插入图片描述
这里散点的大小以像素为单位。颜色为浮点数,自动映射成颜色条(color scale,通过colorbar()显示)。当取值为浮点数时,它所对应的颜色则是对应的colormap上对应长度的取值,colormap就像以下这样的条带:
在这里插入图片描述

3.3plot和scattr的效率对比

plot与scatter除了特征上的差异之外,在数据量较大时,plot的效率将大大高于scatter。

这时由于scatter会对每个散点进行单独的大小与颜色的渲染,因此渲染器会消耗更多的资源。而在plot中,散点基本都彼此复制,因此整个数据集中的所有点的颜色、大小只需要配置一次。所以面对大型数据集时,plot方法比scatter方法好。

4直方图

本部分涉及两部分:1.直方图和条形图的区别,2.如何绘制直方图。
直方图与柱状图类似,适合用于展示二维数据集,展示数据的分布情况,其中一个轴表示需要对比的分类维度,另一个轴代表相应的数值。

4.1区分直方图和条形图

首先需要区分清楚概念:直方图和条形图。

条形图用长条形表示每一个类别,长条形的长度表示类别的频数,宽度表示表示类别。

直方图是一种统计报告图,形式上也是一个个的长条形,但是直方图用长条形的面积表示频数,所以长条形的高度表示频数组距,宽度表示组距,其长度和宽度均有意义。当宽度相同时,一般就用长条形长度表示频数。

4.2如何绘制直方图

直方图一般用来描述等距数据。直观上,直方图各个长条形是衔接在一起的,表示数据间的数学关系。

import matplotlib.pyplot as plt
import numpy as np
import matplotlib
# 设置matplotlib正常显示中文和负号
matplotlib.rcParams['font.sans-serif']=['SimHei']   # 用黑体显示中文
matplotlib.rcParams['axes.unicode_minus']=False     # 正常显示负号
# 随机生成(10000,)服从正态分布的数据
data = np.random.randn(10000)
plt.hist(data,bins=30, normed=0, facecolor="red", alpha=0.7)
# 显示横轴标签
plt.xlabel("区间")
# 显示纵轴标签
plt.ylabel("频数/频率")
# 显示图标题
plt.title("频数/频率分布直方图")

在这里插入图片描述

5总结

本文就简单介绍一下matplotlib的常用图形使用方法,大家仅供参考。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值