数分可视化笔记整理6 - 完整详细版 整理笔记(下)

数据可视化(下)

网格设置

可以通过plt的grid方法来设置是否显示网格。True为显示,False不显示。ax.grid(color=‘r’, linestyle=’-’, linewidth=2)

  • color:设置网格线颜色
  • axis:设置网格线显示x,y或者全部显示(x,y,both)。
  • linestyle:设置网格线形状。
  • linewidth:设置网格线宽度。
plt.plot([1, 2, 3], [4, 5, 6])
# 设置网格
# plt.grid()
plt.grid(color="r", axis="both", linestyle="--", linewidth=3)

数分可视化笔记整理6 - 完整详细版 整理笔记(下)_第1张图片

## 绘图区域设置
我们可以在一张图上绘制多个图形,当然,我们也可以将不同的图形绘制到多个不同的区域当中。  
我们可以采用以下方式来实现多个区域的绘制(创建子绘图区域):
* 通过Figure对象调用add_subplot方法。
* 通过plt的subplot方法。
* 通过plt的subplots方法。
### 子区域1:add_subplot方法
* 首先创建matplotlib.figure.Figure对象,然后通过Figure对象的add_subplot方法增加子绘图区域。  
* add_subplot方法中,需要指定子区域的行数、列数与当前要绘制的子区域。  
* add_subplot方法会返回子绘图对象(轴对象),通过该对象即可实现绘图(matplotlib.axes._subplots.AxesSubplot)。

在绘制图形时,总是需要创建Figure对象。如果没有显式创建,则plt会隐式创建一个Figure对象。在绘制图形时,既可以使用plt来绘制,也可以使用子绘图对象来绘制。  
如果使用plt对象绘制,则总是在最后创建的绘图区域上进行绘制,如果此时尚未创建绘图区域,则会自动创建。  


说明:
* add_subplot方法的参数,即可以使用三个参数分开传递,也可以使用一个参数整体传递。
* 可以通过plt.subplots_adjust方法来调整子绘图的位置与子绘图之间的距离。(left, right, top, bottom, wspace, hspace)
* 创建子区域时,可以使用facecolor设置绘图区域的背景色。
# 创建子绘图区域的第一种方式。通过调用figure对象的add_subplot方法。

# Figure对象是我们绘制图形的一个底层对象。提供绘图的支持(相当于是画布)。
# 我们要绘制图形,就必须创建Figure对象才可以。我们之前在使用plt.plot进行绘制图形时,
# 如果没有显式创建Figure对象,则会隐式自动创建一个。
figure = plt.figure()
# type(figure)
# 创建自绘图区域,返回子绘图区域对象(AxesSubplot)。3个参数:
# 第1个参数:子绘图区域的行数
# 第2个参数:子绘图区域的列数
# 第3个参数:当前创建的子绘图区域索引(序号),注意:索引从1开始。
ax = figure.add_subplot(1, 2, 1)
# 三个参数也可以使用一个str类型,整体进行传递。
# ax = figure.add_subplot("121")
# 当创建好子绘图区域后,我们就可以通过子绘图区域对象,来进行绘制图形(plot方法)。
# ax.plot([1, 3, 5], [10, 15, 20], marker=">")
# plt.plot([2, 3], [5, 6])
# ax2 = figure.add_subplot(1, 2, 2)
# ax2.plot([10, -5, 9], [1, 5, 7], marker="*")
# plt.plot([2, 3], [5, 6])

# 我们之前使用plt.plot绘制图形时,其实,底层就是使用子绘图区域对象来进行绘图的。
# plt.plot总是在最后一个创建的子绘图区域上进行绘制。

# 使用plt.plot也可以代替ax.plot(ax为子绘图区域对象)。但是,这有一个前提:
# 当创建新的子绘图区域后,我们不会在原有的(老的)子绘图区域上再进行绘制。

# 在创建自绘图区域时,可以通过facecolor参数来指定自绘图区域的背景色。
figure.add_subplot(1, 2, 1, facecolor="g")
plt.plot([1, 3, 5], [10, 15, 20], marker=">")
plt.plot([2, 3], [5, 6])
figure.add_subplot(1, 2, 2)
plt.plot([10, -5, 9], [1, 5, 7], marker="*")
plt.plot([2, 3], [5, 6])

# 控制调整子绘图区域之间,以及子绘图区域与画布之间的距离。
# plt.subplots_adjust(wspace=0.5)

数分可视化笔记整理6 - 完整详细版 整理笔记(下)_第2张图片

子区域2:subplot方法

通过调用plt的subplot方法创建子绘图区域,该方法返回子绘图对象。此处方式下,会隐式创建Figure对象。

实际上,这种创建子绘图区域的方式,底层也是通过第一种方式实现的。

# 创建自绘图区域的第二种方法。通过plt.subplot方法。
# 该方法底层是通过第一种方法来实现的。
ax = plt.subplot(1, 2, 1)
ax.plot([1, 2, 3], [4, 5, 6])
plt.subplot(1, 2, 2)
plt.plot([5, 6, 7], [10, 12, 14])

数分可视化笔记整理6 - 完整详细版 整理笔记(下)_第3张图片

子区域3:subplots方法

通过plt的subplots方法创建子绘图区域,该方法返回一个元组(Figure对象与所有子绘图对象,如果是多个子绘图对象,则返回一个ndarray数组)。可以通过sharex与sharey来指定是否共享x轴与y轴。

# 第三种创建自绘图区域的方式:通过plt.subplots方法。
# 第三种方式与前两种方式的不同:前两种方式是一次创建一个自绘图区域,而第三种方式是一次性
# 将所有的子绘图区域都创建好。
# 该方法返回元组类型。元组中含有两个元素(figure对象, 所有子绘图区域对象构成的数组)
# 注意元组中第2个元素的类型:
# 1 当subplots的两个参数(行数与列数)都为1时,该类型为子绘图区域对象类型(AxesSubplot)。
# 2 当subplots的两个参数其中一个为1,一个大于1时,该类型为一维ndarray数组类型。
# 3 当subplots的两个参数全部大于1时,该类型为二维ndarray数组类型。
# fig, ax = plt.subplots(1, 2)
# ax[0].plot([1, 2, 3], [1, 2, 3])
# ax[1].plot([10, 20, 30], [40, 50, 60])
# fig, ax = plt.subplots(2, 2)
# ax[0,0].plot()

# 在创建子绘图区域时,我们可以设置sharex与sharey参数为True,这样,就可以通向x(y)轴的刻度。
fig, ax = plt.subplots(1, 2, sharex=True, sharey=True)
ax[0].plot([1, 2, 3], [1, 2, 3])
ax[1].plot([10, 20, 30], [40, 50, 60])

数分可视化笔记整理6 - 完整详细版 整理笔记(下)_第4张图片

绘图区域大小设置(画布的设置)

如果绘图子区域较多,可能会有些拥挤。此时,我们可以调整绘图区域的大小。方式如下:

  • 在调用plt.figure()创建Figure对象时,通过figsize参数指定。单位为英寸。
  • 在创建Figure对象后,可以通过Figure对象的set_size_inches方法设置。

说明:

  • 如果没有显式创建Figure对象,可以通过plt的gcf函数获取当前的Figure对象。
# 画布大小的设置。
# 可以在创建Figure对象的时候,进行设置。
# figsize 元组,指定宽度与高度,单位:英寸。
# fig = plt.figure(figsize=(10, 10))


# 也可以在创建Figure对象后,通过figure对象调用set_size_inches方法进行设置。
# fig = plt.figure()
# fig.set_size_inches(10, 10)
# plt.plot([5, 3])

# gcf(get current figure) 获取当前的figure对象。
# 如果我们显式创建了Figure对象,则plt.gcf不会再创建新的Figure对象,而是会返回我们之前创建的
# Figure对象。
fig = plt.figure()
figure = plt.gcf()
fig is figure

在这里插入图片描述

标签与刻度设置

可以通过plt对象的相关方法来设置(或获取)标签与刻度等信息。设置还是获取,取决于是否传递实际参数。

  • plt.xlim 设置或获取x轴刻度范围。
  • plt.ylim 设置或获取y轴刻度范围。
  • plt.xticks 设置或获取x轴显示的刻度与标签。
  • plt.yticks 设置或获取y轴显示的刻度与标签。
  • plt.axis 可以同时设置或获取x与y轴的刻度范围,或者是取消刻度显示。
  • 无参数:返回一个元组。(xmin, xmax, ymin, ymax)
  • (xmin, xmax, ymin, ymax) 同时设置x与y轴的刻度范围。
  • off 取消坐标轴显示。
  • tight:坐标轴紧凑显示。
  • equal:x与y具有同样的长度。

轴标签说明与标题设置

  • plt.xlabel 设置x轴的标签说明。
  • plt.ylabel 设置y轴的标签说明。
  • plt.title 设置标题。
# 默认情况下,坐标轴的刻度是根据我们绘制图形时x与y的取值范围进行调整的。
# 我们也可以自行来指定x与y轴的刻度与显示。
# plt.plot([10, 20, 30], [1, 1, 1])

# xlim 设置或获取x轴的刻度显示范围。
# 获取最小值与最大值。
# min_, max_ = plt.xlim()
# 设置最小值与最大值。
# plt.xlim(1, 100)
# 仅设置最小值或最大值中的一个。
# 仅设置最小值。
# plt.xlim(5)
# 仅设置最大值。
# min_, _ = plt.xlim()
# plt.xlim(min_, 100)
# plt.xlim(xmax=100)
# plt.ylim(-10, 10)

# 设置或获取x(y)轴的刻度。
# plt.xticks()
# plt.xlim(1, 50)
# plt.xticks(range(5, 55, 5))
# 在设置x(y)轴的刻度同时,我们还可以指定刻度所显示的标签内容。
# 如果没有显式设置标签,则标签显示的内容就是刻度值的内容。
# plt.xlim(0, 100)
# plt.xticks([60, 80, 90], ["及格", "良好", "优秀"])

# plt.axis 设置获取获取x与y两个轴的范围。
# plt.axis()
# plt.axis((5, 50, -3, 3))

# 取消坐标轴的显示。
# plt.axis("off")
# 让图形进行紧凑显示。
# plt.axis("tight")
# 让x轴与y轴等比例显示。
plt.plot([1, 2, 3], [5, 30, 60])
plt.axis("equal")


# 为x轴与y轴设置说明信息。
plt.xlabel("set x axis")
plt.ylabel("y axis")
# 为图形设置标题
plt.title("set some title")

数分可视化笔记整理6 - 完整详细版 整理笔记(下)_第5张图片

通过绘图对象设置

除了通过plt对象外,我们还可以通过子绘图对象来设置与获取标签与刻度。

  • ax.set_xlim 设置x轴刻度范围。
  • ax.get_xlim 获取x轴刻度范围。
  • ax.set_xticks 设置x轴显示的刻度。
  • ax.get_xticks 获取x轴显示的刻度。
  • ax.set_xticklabels 设置x轴显示的刻度标签。默认显示的是就是刻度值。
  • ax.get_xticklabels 获取x轴显示的刻度标签。

也可以设置标签说明与标题。

  • ax.set_xlabel 设置x轴的标签说明。
  • ax.get_xlabel 获取x轴的标签说明。
  • ax.set_title 设置标题。
  • ax.get_title 获取标题。

说明:

  • 如果需要设置或者获取y轴,只需要将x换成y即可。
  • 在设置标签时,可以使用rotation参数,令标签旋转。
figure, ax = plt.subplots(1, 1)
# 我们也可以使用子绘图区域对象来设置或获取坐标轴刻度,标签等操作。
# 与plt不同,子绘图区域对象的设置与获取,是通过两个方法来实现的。
ax.set_xlim(1, 100)
print(ax.get_xlim())
ax.set_xticks([10, 50, 100])
# 在设置标签时,可以使用rotation参数来控制字体旋转的角度。这样,当刻度比较密集的时候,可以避免
# 便签之间进行重叠。
ax.set_xticklabels(["abcsadfa",  "defasdf", "ihkasdfas"], rotation=60)

添加注解

我们可以在图形上绘制文本等说明信息(注解)。

普通文本

plt.text 显示文本(基于坐标)
plt.figtext 显示文本(基于图片)

箭头

plt.arrow 根据起点坐标(x,y)与各自轴的长度(x + dx, y + dy)绘制箭头。

  • width 箭头尾部的宽度。
  • head_width 箭头的宽度。
  • head_length 箭头的长度。

箭头与文本

plt.annotate 显示箭头与文本。

  • xy 箭头指向坐标
  • xytext 文本起点坐标。(箭头尾部坐标)
  • arrowprops 字典类型,可设置箭头的属性。
  • facecolor 箭头的颜色
  • headwidth 箭头的宽度
  • width 箭尾的宽度
  • shrink 收缩大小
  • headlength 箭头的长度
  • arrowstyle 一些预设的箭头样式。当含有该参数时,上述4项参数将不再有效。
x = np.linspace(-10, 10, 500)
y = x ** 2
plt.plot(x, y)
# 增加文本说明。(基于坐标值)
plt.text(-8, 80, "这是抛物线")
x2 = np.linspace(-3, 4, 500)
y2 = np.exp(x2)
plt.plot(x2, y2)
plt.text(3.5, 60, "这是指数函数")
plt.text(0, 0, "这是最小值点")
# 增加文本说明,基于图像比例(原点在图像的左下角)
plt.figtext(0, 0.0, "说明")
x = np.linspace(-10, 10, 500)
y = x ** 2
plt.plot(x, y)
# 画箭头。x,y起始点坐标。dx,dy分别指定x与y的偏移量。终止点坐标(x + dx, y + dy)
# plt.arrow(-3, 40, 3, -40, width=0.3, head_length=1.5, head_width=1.0, color="r")
# plt.text(-5, 45, "这是极值点")

# 箭头文本一起画
# shrink参数:设置箭头缩水的比例。
# arrowstyle:使用内建的箭头样式。当arrowprops中含有该参数时,其他参数(width,headlength等)则无效。
# plt.annotate(xy=(0,0), xytext=(7.5,40), s="这是极值点", arrowprops={"width":0.5})
# plt.annotate(xy=(0,0), xytext=(7.5,40), s="这是极值点", arrowprops=dict(width=3.5, facecolor="r", headlength=5.8,
#                 headwidth=10, shrink=0.1))
plt.annotate(xy=(0,0), xytext=(7.5,40), s="这是极值点", arrowprops=dict(arrowstyle="<->"))

绘图样式设置

我们可以通过plt.style.use("样式名")来设置绘图使用的样式。

说明:
执行plt.style.available来获取所有的绘图样式。

# 查看当前所有可用的样式。
# plt.style.available
# 设置样式。
plt.style.use("ggplot")

图形类型

折线图

plt.plot

# 折线图能够体现数据的增减变化,适合呈现具有趋势发展的数据。
plt.plot([1, 2, 3, 4], [5, -3, 7, -8], marker="o")

柱形图 / 条形图

plt.bar 柱形图
plt.barh 条形图

# 柱形图 / 条形图适合体现数据的比较/对比。使用于数据比较大小的场景。
# plt.bar(x=["A", "B", "C"], height=[550, 480, 600])
plt.barh(y=["A", "B", "C"], width=[550, 480, 600])

饼图

plt.pie 饼图

  • labels 每个部分显示的标签。
  • explode 指定每个部分距离圆心的偏移量(单位为半径的长度)。
  • colors 指定每个部分的颜色。
  • autopct 设置每个部分显示的比例值(格式化)。
  • couterclock 是否逆时针绘图。默认为True。
  • startangle 初始绘图点位置(逆时针偏移x轴的角度)。默认为偏移0度(x轴)。
  • shadow 是否含有阴影,默认为False。
# 饼图适合体现数据比例的分配对比。(饼图不适合展示过多的数据)
# plt.pie([1, 2, 3, 4])
# labels 显示每个数据的标签。
# plt.pie([1, 2, 3, 4], labels=["A", "B", "C", "D"])
# explode 用来指定每个数据(每张饼距离圆心的距离,默认为0),单位为半径。
# 作用:用来突出显示某一个(几个)数据。
# plt.pie([1, 2, 3, 4], labels=["A", "B", "C", "D"], explode=[0, 0, 0, 0.5])
# colors用来设置每个部分的颜色。
# plt.pie([1, 2, 3, 4], labels=["A", "B", "C", "D"],colors=["r", "g", "b", "y"])
# autopct 设置每个部分的百分比。
# plt.pie([1, 2, 3, 4], labels=["A", "B", "C", "D"], autopct="%.2f%%")
# counterclock 是否逆时针绘制图形。默认为True。
# plt.pie([1, 2, 3, 4], labels=["A", "B", "C", "D"], counterclock=False)
# startangle 设置逆时针便宜x轴的角度。(默认为0),从哪里开始绘制图形。
# plt.pie([1, 2, 3, 4], labels=["A", "B", "C", "D"], startangle=90)
# shadow 是否含有阴影,默认为True。
plt.pie([1, 2, 3, 4], labels=["A", "B", "C", "D"], shadow=False)

散点图 / 气泡图

散点图适合于用来显示与比较数据的分布状态。

  • marker 点的标记。
  • s 点的大小。
  • color 点的颜色。

说明:

  • color与s参数可以统一设置,也可以为每一个点单独设置。
# 散点图 / 气泡图体现的数据的分布状态。能够表现数据维度之间的关系。
# 散点图能够表示两个维度。气泡图可以表示2~4个维度(气泡的大小与气泡的颜色)
x = np.random.randint(0, 101, size=100)
y = np.random.randint(0, 101, size=100)
# s 点的大小,color:点的颜色。s与color可以统一设置,也可以为每一个点分别进行设置。
# plt.scatter(x, y, s=100, color="g")
size = np.random.randint(20, 100, size=100)
c=["r", "g", "b", "y"]
color = np.random.choice(c, 100)
plt.scatter(x, y, s=size, color=color)

直方图

直方图(histogram)可以看成是一种特殊的柱形图,用来将连续的数据频率(数量)进行离散化显示。在直方图中,数据被分割成若干区间,然后统计每个区间数据出现的频率(数量)。
我们可以通过plt.hist来绘制直方图。

  • bins:设置分割区间的数量。
  • normed:进行归一化显示。(概率密度)
# 直方图类似于柱形图,用来将连续值进行离散化的表示。
x = np.random.normal(scale=20, size=100)
# 如果没有指定划分的区间(段数),则默认为10。(区间长度是均匀划分【根据数值的取值范围划分】的。)
# plt.hist返回值:
# 第1个数组:每个桶(区间)中包含元素的数量。
# 第2个数组:我们划分的区间(元素数量是桶的数量+1。)
# 每个区间是前闭后开。但是,最后一个区间例外,最后一个区间是双闭的。
# plt.hist(x)
# 我们也可以显式指定桶的数量。
# plt.hist(x, bins=4)
# bins可以指定一个整数(int),此时表示桶数(划分的区间数),桶数是均匀划分的。我们也可以指定不
# 均匀的区间。(给bins传递一个数组)
plt.hist(x, bins=[-100, 10, 20, 25, 100])

箱线图

箱线图也称盒须图。通过极值与Q1,Q2,Q3值来描述数据。通过箱线图,我们可以发现数据中的离群(异常)值。
箱线图的离群点定义为:Q3+1.5IQR和Q1-1.5IQR。其中IQR为两个四分位之间的距离。

# 箱线图用来检测离群点,离群点是可能潜在的异常值(并非一定是异常值)。
# IQR   Q3与Q1之间的距离。
# 离群点:  x > Q3 + 1.5IQR 或者 x < Q1 - 1.5IQR
x = [1, 3, 10, 15, 18, 20, 38]
plt.boxplot(x)

Series与DataFrame图形绘制

Series与DataFrame类型的对象也支持图形绘制,使用对象的plot方法即可。
如果我们需要绘制图形的数据就存在Series或者DataFrame对象中,我们就可以直接绘制,而无需使用plt.plot。

其他类型图形

plot默认绘制的是线形图,我们可以通过调整其kind参数的值来绘制其他类型的图形。

  • line:线形图
  • bar:柱形图
  • barh:条形图
  • hist:直方图
  • kde / density:核密度图
  • pie:饼图
  • box:箱线图
  • area:面积图

参数:

  • color
  • alpha
  • stacked:是否堆叠。

说明:
plot(kind=“类型”)也可以通过plot."类型"来进行绘制。

import pandas as pd
# Series与DataFrame也支持绘制图形,只需要调用相关对象的plot方法即可。
s = pd.Series([1, 5, 20, 30], index=[2, 5, 8, 10])
# kind 来指定图像的类别,默认为线图。kind="line"
# s.plot(kind="line")
# s.plot(kind="area")
# s.plot(kind="kde")
df = pd.DataFrame([[1, 5, 10], [2, 8, 9], [3, 7, 6]], columns=["A", "B", "C"])
display(df)
# df.plot()
# 显示堆叠图,堆叠图更突出显示数据之间的比例。
# df.plot(kind="bar", stacked=True)

# df.plot(kind="box")
# 通过y参数指定绘制哪一列(列标签)。
# df.plot(kind="pie", y="A")
# 每一列都进行绘制。在子区域进行绘制。
df.plot(kind="pie", subplots=True)



你可能感兴趣的:(#,=python=挖掘和ML,1=)