众所周知,python的数据分析库主要是numpy,pandas,和matplotlib,而前面两个主要是数据处理工具库,最后一个才是真正的作图展示工具库。本节来学习一下matploatlib工具库的使用。
Matplotlib常用绘图函数
pyplot简介
matplotlib.pyplot
。matplotlib.pyplot是命令样式函数的集合,使matplotlib像MATLAB一样工作。每个pyplot函数对图形进行一些更改:例如,创建图形,在图形中创建绘图区域,在绘图区域中绘制一些线条,用标签装饰图形等,
导入包:import matplotlib.pyplot as plt.
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt# 如果没有指定横坐标x,则横坐标x会从0开始,自增。(0,1,2,3,4……)
# 如果我们只绘制一个值,该值就是一个点,我们需要指定marker来设置标记,否则该点不可见。
# plt.plot(10, marker="o")
# 绘制多个点。
plt.plot([1, 5, 8, 4, 6], marker=">")
#如果没有指定横坐标x,则横坐标x会从0开始(1,0)(5,1)……
# 显式指定横坐标。
plt.plot([1, 3, 5, 7, 9], [2, 4, 16, 8, 10], marker="o")
#绘制点(1,2)(3,4)……
plt.show()
折线图
# 可以一次性绘制多个图形。
# 格式字符串可以指定标记形状,颜色与线型。
plt.plot([1, 3], [2, 4], "r-o", [5, 8], [10, 2], "g--x")
下图如定义,红色实线圆点以及绿色虚线叉点。
支持中文
# 默认情况下,matplotlib使用的是西方字体(不支持中文的),
# 如果需要显式中文,可以将字体设置成支持中文的字体。"SimHei"——黑体
mpl.rcParams["font.family"] = "SimHei"
plt.plot([1, -2, 3], [5, -10, 6])
plt.title("中文标题")
# 当字体设置成支持中文的字体时,负号也会使用Unicode字符集的负号(不支持显式)。
# 我们需要恢复成ASCII字符集中的负号。当出现负号是正常显示
mpl.rcParams["axes.unicode_minus"]=False
# 设置字体的大小。
mpl.rcParams["font.size"] = 20
设置标签
last_year = np.random.randint(400, 500, 12)#此处为随机输出,结果可能不同
this_year = np.random.randint(400, 500, 12)
# plt.plot(range(1, 13), last_year, marker="o")
# plt.plot(range(1, 13), this_year, marker="o")
# 设置图例 1 在legend方法中,按顺序指定每次绘图的标签。
# plt.legend(["2017", "2018"])
# 2 在绘制(plot)图形时,指定label参数值,该参数值为图例需要显示的文本。
#range(1,13)左闭右开,可以取1,不可取13。
plt.plot(range(1, 13), last_year, marker="o", label="2017")
plt.plot(range(1, 13), this_year, marker="o", label="2018")
plt.plot(range(1, 13), last_year, marker="o", label="2017")
plt.plot(range(1, 13), this_year, marker="o", label="2018")
# 设置图例时,可以通过loc属性来设置图例显示的位置。如果没有显式指定,则参数值为右上角。
# loc属性可以指定为字符串,整数值。或者是一个元组(两个float值指定比例)此时,会根据图像比例计算
# loc=1表示显示在右上
# frameon参数用来设置图例是否显示边框。默认为True。
# title设置图例显示的标题。
# ncol参数用来设置图例显示的列数。(默认为1。)
plt.legend(loc=1, title="图例标题", ncol=2)
# ncol参数用来设置图例显示的列数。(默认为1。)
子图
matplotlib.pyplot.subplot(numRows, numCols, plotNum)
。图表的整个绘图区域被分成numRows行和numCols列;
。按照从左到右,从上到下的顺序对每个子区域进行编号;
。plotNum:编号,指定创建的 Axes 对象所在的区域。
matplotlib.pyplot.subplots(nrows=1,ncols=1,**fig_kw):创建一个带有多个axes(坐标系/绘图区)的图。
。图表的整个绘图区域被分成nrows行和ncols列。
。改方法返回画布对象和一个子图组成的列表。
。操作子图时可以使用列表下标的形式。
# 创建Figure对象,然后通过调用add_subplot增加绘图区域。
# 创建Figure对象。(画图必备的底层对象)
f = plt.figure()
# 调用add_subplot增加子绘图区域对象,返回AxesSubplot类型的对象。
# 三个参数,行数,列数,当前的绘图区域
ax = f.add_subplot(1, 2, 1)
# 调用AxesSubplot对象的plot方法,进行图形绘制。
# ax.plot([1, 5, 8], [10, -3, 6])
plt.plot([1, 5, 8], [10, -3, 6])
# ax = f.add_subplot(1, 2, 2)
ax = f.add_subplot(122, facecolor="g")
#云平台”122”加了引号,作为字符串可以,其实是(1,2,2)1行,2列,第2个为绿色。本地平台不加引号(1,2,2)或(122)
# ax.plot([10, 15, 28], [1, -33, 26])
plt.plot([10, 15, 28], [1, -33, 26])# 我们可以使用plt或者是AxesSubplot对象,调用plot方法进行绘制。
# 当我们使用plt绘制时,永远会在最后一次创建的子绘图区域上进行绘制。
# 如果当前没有子绘图区域,此时会创建一个。# 调整距离(绘图区域之间的距离以及绘图区域与边界间的距离)
plt.subplots_adjust(wspace=0.5)
柱形图 / 条形图
plt.bar 柱形图
plt.barh 条形图
输入:
# 柱形图,条形图适合比较数值的大小。
plt.bar(range(1, 11), np.random.randint(100, 200, 10))
# plt.barh(range(1, 11), np.random.randint(100, 200, 10))
plt.pie 饼图
输入:
# 饼图适合于表示比例大小。(数量不宜过多,否则会显得凌乱)
plt.pie([10, 20, 30, 40], labels=["A部门", "B部门", "C部门", "D部门"], explode=[0, 0, 0, 0.5], colors=["r", "g", "b", "y"], autopct="%.2f", counterclock=False, startangle=90, shadow=True)
散点图 / 气泡图
散点图适合于用来显示与比较数据的分布状态。
- marker 点的标记。
- s 点的大小。
- color 点的颜色。
color与s参数可以统一设置,也可以为每一个点单独设置。
输入:
# 散点图/气泡图适合表示数据整体的分布信息。
# 散点图可以表示两个维度,加上气泡大小,颜色,可以多表示两个维度。
# s(点的大小)与color(点的颜色)既可以统一制定,也可以单独制定。
size = [10, 20, 30, 40]
color = ["r", "g", "b", "y"]
plt.scatter(np.random.randint(0, 100, 100), np.random.randint(0, 100, 100),
s=np.random.choice(size, 100), color=np.random.choice(color, 100))
直方图
直方图(histogram)可以看成是一种特殊的柱形图,用来将连续的数据频率(数量)进行离散化显示。在直方图中,数据被分割成若干区间,然后统计每个区间数据出现的频率(数量)。
我们可以通过plt.hist来绘制直方图。
- bins:设置分割区间的数量。
- normed:进行归一化显示。(概率密度)
输入:
# 直方图适合将连续值转换成离散值,方便分组统计数量。
plt.hist(np.random.randn(100), bins=10, normed=True)
# 返回的两个ndarray。
# 第一个ndarray表示每个桶中元素的数量。
# 第二个naarray表示每个桶的界限。(前闭后开,最后一个桶例外,两端都是闭区间。)
箱线图
箱线图也称盒须图。通过极值与Q1,Q2,Q3值来描述数据。通过箱线图,我们可以发现数据中的离群(异常)值。 箱线图的离群点定义为:Q3+1.5IQR和Q1-1.5IQR。其中IQR为两个四分位之间的距离。
输入:
# 箱线图适合分析离群值(异常值)。
x = np.random.normal(0, 10, size=1000)
plt.boxplot(x)
总结
Python语言有着无可比拟的简单性和灵活性,结合Matplotlib库,Python能够高效地进行数据分析并生成丰富多样的图表。利用简单代码的特性,我们能够快速呈现数据洞察,极大地提升了人工智能数据分析的效率。无论是折线图、柱状图还是散点图,Python都能够轻松实现,为数据分析师提供了无限的创造性展示方式。因此,Python及其可视化工具在数据科学领域的应用,显然为我们带来了巨大的便利和价值。