二、Python数据挖掘(Matplotlib库)

目录:

  • 二、Python数据挖掘(Matplotlib库)
      • 一、Matplotlib 简介
      • 二、Matplotlib 理论基础
        • 1.Matplotlib 的三层结构
      • 三、常见的图像种类
      • 四、matplotlib.pyplot 模块
    • plt.figure()
    • plt.savefig(PATH)
    • plt.show()
      • 五、折线图 plot
        • 1.绘制简单的折线图
    • plt.figure()
    • plt.figure(figsize=(width, height), dpi=)
    • plt.plot(点系x轴列表, 点系y轴列表)
    • plt.show()
      • 2.辅助显示层对折线图优化
        • 添加自定义的x,y刻度:
    • plt.xticks(x, [labels], [**kwargs])
    • plt.yticks(y, [labels], [**kwargs])
      • 3.刻度值的中文显示问题
      • 4.辅助显示层添加网格
    • plt.grid(True, [linestyle="-"], [alpha=1])
      • 5.添加标签描述信息
    • plt.xlabel(字符串)
    • plt.ylabel(字符串)
    • plt.title(字符串)
      • 6.图像层添加多条折线
    • plt.plot(点系x轴列表, 点系y轴列表, color="", linestyle="")
    • plt.plot(点系x轴列表, 点系y轴列表, label="")
    • plt.legend(loc="")
      • 7.用多个坐标系显示图表
    • fig, axes = plt.subplots(nrows=1, ncols=1, **fig_kw)
    • set_xticks(x)
    • set_xticklabels(labels, [**kwargs])
    • set_yticks(y)
    • set_yticklabels(labels, [**kwargs])
    • set_xlabel()
    • set_ylabel()
    • set_title()
          • 例——创建多个图表的一般步骤(面向对象)
        • 8.折线图的应用场景
      • 六、散点图 scatter
        • 1.绘制简单的散点图
    • plt.scatter(点系x轴列表, 点系y轴列表)
      • 七、柱状图 bar
        • 1.绘制柱状图
    • plt.bar(x, y, [width, align='center', **kwargs])
        • 2.绘制多类柱状图
      • 八、直方图 hist
        • 1.直方图相关概念
        • 2.绘制直方图
    • plt.hist(x, bins=None, density=None, **kwargs])
      • 九、饼图 pie
        • 1.绘制饼图
    • plt.pie(x, labels=, autopct=, colors)

一、Matplotlib 简介

  • 什么是 Matplotlib?

Matplotlib 是专门用于开发2D图表(包括3D图表——较少)的库,其使用方式简单,以渐进、交互式的方法实现数据的可视化

  • 为什么要学习 Matplotlib?

可视化是在整个数据挖掘的关键辅助工具,可以用更清晰的方式来展现数据,帮助我们理解数据,从而调整我们的分析方法

但是 Matplotlib 主要以绘制2D图表为主,而一些更为炫酷的图表和3D图表 Matplotlib 是无能为力的,但除了 Matplotlib 之外还有其他许多更多的库,如:百度的 Echarts 库,更详细的扩展内容可以浏览以下网址:

  • Echarts官网
  • Echarts官方文档

对于我们日常的数据挖掘与数据分析来说, Matplotlib 就已经足够了,毕竟是给自己看的,不需要太炫酷


二、Matplotlib 理论基础

Matplotlib 图像结构如图所示:

1.Matplotlib 的三层结构

(1)容器层——底层

主要由 Canvas(画板)、Figure(画布、图片)、Axes(图表)组成

  • 画板Canvas 是位于最底层的系统层,在绘图的过程中充当画板的角色,即它的作用是放置 画布Figure,通常情况下,我们并不需要对 Canvas 特别的声明,但当我们需要在其他模块如:PyQt中调用Matplotlib模块绘图时,就需要首先声明 Canvas ,这就相当于我们在自家画室画画不用强调要用画板,出去写生时要特意带一块画板
  • 画布Figure画板Canvas 上方的第一层,也是需要用户来操作的应用层的第一层,在绘图的过程中充当画布的角色,这就相当于我们在画画的时候,需要在画板上放置一张画纸来进行绘制,而不是直接在画板上进行绘制。当我们需要对 画布Figure 的大小、背景色彩等进行设置时,就相当于是在选择画布大小、材质的过程。因此,每当我们绘图的时候,写的第一行就是创建 Figure 的代码
  • 图表Axes 是应用层的第二层,在绘图的过程中相当于画布上的绘图区的角色。一个 画布Figure 对象可以包含多个 图表Axes 对象,每个 图表Axes 都是一个独立的坐标系,绘图过程中的所有图像都是基于坐标系绘制的。一个 图表Axes 对象就是一个坐标系上的第一、二、三、四象限的区域


(2)图像层——位于图表Axes上

图像层指 图表Axes 内通过 折线图plot散点图scatter柱状图bar轮廓图contour直方图histbarbs饼图pie 等函数根据数据绘制出的图像

(3)辅助显示层——位于图表Axes上
辅助显示层为 图表Axes 内除了根据数据绘制出的图像以为的内容,主要包括:外观facecolor网格线grid图例legend标体title坐标轴axis 等内容,该层的设置可使图像显示得更为直观而易于被人理解,但又不会对图像产生实质的影响,如:坐标轴示数、标题等


三、常见的图像种类

折线图 plot:能够显示数据的变化趋势,反映事物的变化情况(变化

散点图 scatter:判断变量之间是否存在数量关联趋势,展示离群点(分布规律

柱状图 bar:绘制成离散的数据,能够一眼看出各个数据的大小,比较数据之间的差别(统计/对比

直方图 hist:由一系列高度不等的纵向柱段表示数据的分布情况,一般横轴表示数据范围,纵轴表示某一范围的数量情况,绘制连续性的数据展示一组或者多组数据的分布状况(统计

饼图 pie:分类数据的占比情况(占比

柱状图与直方图的区别

  • 直方图展示数据范围的分布量,柱状图比较数据的大小
  • 直方图的x轴数据是连续的,柱状图的x轴数据是离散的
  • 直方图的柱段宽度是有意义的,可以不一,柱状图的柱段宽度是无意义的,宽度须一致

四、matplotlib.pyplot 模块

matplotlib.pyplot 模块包含了一系列类似于MATLAB的画图函数,它的函数作用于当前 画布Figure 的当前坐标系 图表Axes

导入模块并命名为 plt

import  matplotlib.pyplot as plt

plt.figure()

创建画布

plt.savefig(PATH)

可以保存绘制出的图像
PATH 可以是相对路径或绝对路径
当路径为相对路径时,当前工作目录为在Jupyter Notebook 中 New .ipynb 文件的位置

  • 当图片文件没有命名时,默认生成 .png 为文件名的文件
  • 可以指定文件的保存扩展名,如 .jpg.png,默认为 .png 文件
  • 当文件存在时,会覆盖原文件

plt.show()

显示图像

  • :保存图像必须要在显示图像之前,否则图像无法正常保存(重要

五、折线图 plot

1.绘制简单的折线图

plt.figure()

以默认的属性创建画布

plt.figure(figsize=(width, height), dpi=)

指定画布的属性创建画布
figsize=() 指定图的宽和高
dpi= 指定图像的清晰度
返回值 fig 对象

plt.plot(点系x轴列表, 点系y轴列表)

绘制折线图

plt.show()

显示图像

例:展现上海一周的天气,比如从星期一到星期日的天气温度如下

import matplotlib.pyplot as pltplt.figure()
plt.plot([1, 2, 3, 4, 5, 6, 7], [16, 19, 14, 15, 11, 11, 9])
# 保存文件
plt.savefig("C://Users/GOODman/Desktop/")
plt.show()


指定其他画布属性:

import matplotlib.pyplot as pltplt.figure(figsize=(20, 8), dpi=80)
plt.plot([1, 2, 3, 4, 5, 6, 7], [16, 19, 14, 15, 11, 11, 9])
plt.show()

2.辅助显示层对折线图优化
添加自定义的x,y刻度:

plt.xticks(x, [labels], [**kwargs])

指定x轴的刻度,括号 () 内不指定内容时取默认刻度
x 刻度,相当于是指定x轴上的刻度,必须是由数字组成的列表,其中在该列表指定了的数字就是将会显示的刻度值

  • 刻度是一直存在的,而x标签则指定了其对应位置的刻度是否显示出来(重要

plt.yticks(y, [labels], [**kwargs])

指定y轴的刻度,括号 () 内不指定内容时取默认刻度
y 刻度,相当于是指定y轴上的刻度,必须是由数字组成的列表,其中在该列表指定了的数字就是将会显示的刻度值

  • 刻度是一直存在的,而x标签则指定了其对应位置的刻度是否显示出来(重要
  • labels 标签,是覆盖刻度值的内容,即可以指定刻度显示的内容,可以不再是原始的数字
  • **kwargs要指定的属性序列,如:
    color=“blue” 设置刻度字体颜色为蓝色
    rotation=60 设置刻度字体的倾斜角为60°

x/ylabels标签 是两个一 一对应的列表,因此它们的长度要设置为相等,否则会报错

例:上海某地区某一个小时内每分钟的温度变化波动范围在15~18℃之内

设置从0开始且步长为5的的刻度坐标轴——两种方法(重要

  • 设置指定步长刻度的方式:由于x,y是刻度的直接显示内容的 列表/元组 因此我们可以利用:
  • range() 可以设置步长
  • 列表/元组的切片 同样可以设置步长
import matplotlib.pyplot as plt
import random"""生成[0, 1, 2,..., 58, 59]的列表"""
x = range(60)
"""生成包含60个元素的列表,这些元素是[15, 18]之间的随机数"""
y = [random.uniform(15, 18) for i in x]
plt.figure(figsize=(20, 8), dpi=200)
plt.plot(x, y)"""使用列表切片的方式设置步长为5"""
plt.xticks(x[::5])
"""使用range()函数设置步长"""
plt.yticks(range(0, 25, 5))
plt.show()

例:修改刻度的值为 11:00 的时间格式 ,蓝色字体,倾斜角为 30°,步长为5分

import matplotlib.pyplot as plt
import random"""数据准备"""
x = range(60)
y = [random.uniform(15, 18) for i in x]"""创建画布"""
plt.figure(figsize=(10, 8), dpi=80)
""""绘制折线图"""
plt.plot(x, y)"""修改x轴刻度"""
x_labels = ["11时{:02d}分".format(i) for i in x]
plt.xticks(x[::5], x_labels[::5], color="blue", rotation=30)
plt.yticks(range(0, 25, 5))
plt.show()

3.刻度值的中文显示问题

:在 Jupyter Notebook 中绘图时,刻度值是默认无法显示中文的,可以加上以下几行代码来显示中文:

import matplotlib.pyplot as plt
# 指定默认字体
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['font.family']='sans-serif'
# 解决负号'-'显示为方块的问题
plt.rcParams['axes.unicode_minus'] = False
4.辅助显示层添加网格

plt.grid(True, [linestyle="-"], [alpha=1])

可以让图表显示网格
True 表示显示网格
linestyle="-" 表示网格线的风格,默认为实线
alpha=1 表示网格线的透明度,默认值为1

例:

import matplotlib.pyplot as plt
import randomplt.figure(figsize=(5, 4), dpi=80)
plt.grid(True, linestyle="-", alpha=0.6)
plt.show()

5.添加标签描述信息

描述信息即 x/y 的数值所代表的含义

plt.xlabel(字符串)

为x轴添加 字符串 标签

plt.ylabel(字符串)

为y轴添加 字符串 标签

plt.title(字符串)

为图表添加 字符串 标签标体

例:

import matplotlib.pyplot as plt
import randomplt.figure(figsize=(5, 4), dpi=80)
plt.grid(True, linestyle="-", alpha=0.6)
plt.xlabel("时间")
plt.ylabel("温度")
plt.title("中午11时00分到11时55分之间的温度变化")
plt.show()

6.图像层添加多条折线

再次调用 plt.plot(点系x轴列表, 点系y轴列表) 函数即可添加多条折线

例:增加北京某地区某一个小时内每分钟的温度变化波动范围在-10~4℃之内

import matplotlib.pyplot as plt
import randomx = range(60)
y_shanghai = [random.uniform(15, 18) for i in x]
y_beijing = [random.uniform(-10, 4) for i in x]plt.figure(figsize=(10, 8), dpi=80)
plt.plot(x, y_shanghai)
plt.plot(x, y_beijing)x_labels = ["11时{:02d}分".format(i) for i in x]
plt.xticks(x[::5], x_labels[::5], color="blue", rotation=30)
plt.yticks(range(-10, 25, 5))
"""显示网格"""
plt.grid(True, linestyle="-", alpha=0.6)plt.xlabel("时间")
plt.ylabel("温度")
plt.title("上海、北京某地区在某个小时内的温度变化")plt.show()


在有多条折线的情况下,折线的风格可能需要指定成更易于区分的风格,可以指定

plt.plot(点系x轴列表, 点系y轴列表, color="", linestyle="")

指定折线图 的风格
color="" 指定折线的颜色
linetytle="" 指定折线的线条

color 含义 linestyle 含义
r 红色 - 实线
g 绿色 -- 虚线
b 蓝色 -. 点划线
w 白色 : 点虚线
c 青色 空格 留空
m 洋红
y 黄色
k 黑色

在有多条折线的情况下,通常还需要指定折线的标签——折线含义

(1) 此时就要在 plot() 函数中为当前绘制的折线添加标签

plt.plot(点系x轴列表, 点系y轴列表, label="")

label="" 即为当前绘制的折线添加标签

(2) 添加标签后还需要调用 legend() 函数显示标签

plt.legend(loc="")

把图表所指定的标签显示出来
loc="" 用于指定标签的显示位置
默认时选择最佳位置,一般不用指定loc,取默认值即可

loc 含义
“best” 或 0 最佳位置(默认值)
“upper right” 或 1 右上方
“upper left” 或 2 左上方
“lower left” 或 3 右下方
“lower right” 或 4 左下方
“right” 或 5 右端
“center left” 或 6 左端中部

例:

此处仅展示部分关键代码

plt.plot(x, y_shanghai, label="上海")
plt.plot(x, y_beijing, label="北京")
plt.legend()

7.用多个坐标系显示图表

在前面,我们整个绘图过程相当于面向过程绘图,下面利用面向对象的画图方法来在多个坐标系上显示图表

fig, axes = plt.subplots(nrows=1, ncols=1, **fig_kw)

创建一个带有多个Axes图表 坐标系的图
nrows=1 是图像的行显示数
ncols=1 是图像的列显示数
即图表的总个数为 nrows × ncols
返回值 有两个返回值:

  • 图对象fig 画布对象
  • 图表对象列表axes 可以通过下标值来访问第几个图表

**fig_kw 为图表的格式设置,如:figsize=(10, 8),dpi=80等

发生变化的方法

在原来的面向过程绘图中 plt.xticks(x, [labels], [**kwargs]) 可以同时传递三个参数,但在面向对象中,该函数发生了分解,分解成为两个方法:

set_xticks(x)

设置x轴的刻度

set_xticklabels(labels, [**kwargs])

如果需要覆盖原刻度值的内容,则需要在这个方法中指定

set_yticks(y)

设置y轴刻度

set_yticklabels(labels, [**kwargs])

如果需要覆盖原刻度值的内容,则需要在这个方法中指定

此外,原指定x轴和y轴标签的 xlabel() 函数和 ylabel() 函数的名称发生变化,指定标题标签的 title() 函数的名称也发生了变化,它们的用法和前面的函数相同,名称多了个 set_

set_xlabel()

设置x轴标签

set_ylabel()

设置y轴标签

set_title()

设置标题标签

例——创建多个图表的一般步骤(面向对象)
import matplotlib.pyplot as plt
import random"""准备x轴和y轴坐标"""
x = range(60)
y_shanghai = [random.uniform(15, 18) for i in x]
y_beijing = [random.uniform(-10, 4) for i in x]"""创建画布和图表"""
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(10, 8), dpi=80)"""可以绘制多个折线图"""
axes[0].plot(x, y_shanghai, label="上海")
axes[1].plot(x, y_beijing, label="北京")"""显示图例"""
axes[0].legend()
axes[1].legend()"""构建x轴的变化刻度"""
x_ticklabels = ["11:{:02d}".format(i) for i in x]"""修改x轴和y轴的刻度显示"""
axes[0].set_xticks(x[::5])
axes[0].set_xticklabels(x_ticklabels[::5], color="blue", rotation=30)
axes[0].set_yticks(range(-10, 25, 5))
axes[1].set_xticks(x[::5])
axes[1].set_xticklabels(x_ticklabels[::5], color="blue", rotation=30)
axes[1].set_yticks(range(-10, 25, 5))"""添加网络显示"""
axes[0].grid(True, linestyle="--", alpha=0.6)
axes[1].grid(True, linestyle="--", alpha=0.6)"""添加x轴和y轴描述信息和标题"""
axes[0].set_xlabel("时间")
axes[0].set_ylabel("温度")
axes[0].set_title("上海某地区在某个小时内的温度变化")
axes[1].set_xlabel("时间")
axes[1].set_ylabel("温度")
axes[1].set_title("北京某地区在某个小时内的温度变化")"""显示图像"""
plt.show()

8.折线图的应用场景

折线图能够很好地反映因变量随自变量的波动变化规律,在股市中尤为明显

此外,plt.plot() 除了可以画折线图,也可以用于画各种属性函数图像

  • x = np.linspace(-10, 10, 100),由于需要生成较为平滑的曲线,需要十分密集的数据点,该方法是在 [-10,10] 之间生成1000个等距的点,足够密集

例:此处只是展示效果,不用纠结代码,以后会讲到

import matplotlib.pyplot as plt
import numpy as np"""准备数据"""
x = np.linspace(-10, 10, 100)
y = np.sin(x)"""创建画布"""
plt.figure(figsize=(10, 8), dpi=80)
"""绘制函数图像"""
plt.plot(x, y)
"""添加网络表示"""
plt.grid()"""显示图像"""
plt.show()


六、散点图 scatter

1.绘制简单的散点图

由于散点图的特性,我们只关心其变量之间是否存在数量关联趋势,并展示离群点,因此并不需要很多花哨的显示

需求:探究房屋面积和房屋价格的关系

房屋面积数据
x = [225.98, 247.07, 253.14, 457.85, 241.58, 301.01, 20.67, 288.64, 163.56, 120.06, 207.83, 342, 75, 147.9, 53.06, 224.72, 29.51, 21.61, 483.21, 245.25, 399.25, 343.35]

房屋价格数据
y = [196.63, 203.88, 210.75, 372.74, 202.41, 247.61, 24.9, 239.34, 140.32, 104.15, 176.84, 288.23, 128.79, 49.64, 191.74, 33.1, 30.74, 400.02, 205.32, 330.64, 283.45]

plt.scatter(点系x轴列表, 点系y轴列表)

绘制散点图

import matplotlib.pyplot as plt"""准备数据"""
x = [225.98, 247.07, 253.14, 457.85, 241.58, 301.01, 20.67, 288.64, 163.56, 120.06, 207.83, 342.75, 147.9, 53.06, 224.72, 29.51, 21.61, 483.21, 245.25, 399.25, 343.35]
y = [196.63, 203.88, 210.75, 372.74, 202.41, 247.61, 24.9, 239.34, 140.32, 104.15, 176.84, 288.23, 128.79, 49.64, 191.74, 33.1, 30.74, 400.02, 205.32, 330.64, 283.45]"""创建画布"""
plt.figure(figsize=(10, 8), dpi=80)
"""绘制散点图"""
plt.scatter(x, y)
"""显示图像"""
plt.show()


七、柱状图 bar

1.绘制柱状图

plt.bar(x, y, [width, align=‘center’, **kwargs])

x 横坐标的数据列表
width 柱状图的宽度
align 指定柱段的位置

  • center 柱段在x轴的中间位置,为默认值
  • edge 柱段以x轴左对齐

**kwargs 是要指定的属性列表,如:color=[“r”, “g”…“b”] 指定柱状图各柱段的颜色

  • 其他函数和 折线图 用法一样,详情参考 折线图 plot 这里不再作详细介绍

例:对比下列电影的票房收入

电影名称
movie_names = ["唐人街探案3", "你好,李焕英", "刺杀小说家", "熊出没·狂野大陆", "新神榜:哪吒重生", "侍神令", "人潮汹涌", "我为你喝彩", "梦醒黄金城"]

对应的票房数(单位:亿)
tickets = [35.65, 27.30, 5.38, 4.06, 2.40, 2.10, 1.50, 0.0271, 0.00039]

import matplotlib.pyplot as plt"""解决中文显示问题"""
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['font.family']='sans-serif'
plt.rcParams['axes.unicode_minus'] = False"""准备数据"""
movie_names = ["唐人街探案3", "你好,李焕英", "刺杀小说家", "熊出没·狂野大陆", "新神榜:哪吒重生", "侍神令", "人潮汹涌", "我为你喝彩", "梦醒黄金城"]
tickets = [35.65, 27.30, 5.38, 4.06, 2.40, 2.10, 1.50, 0.0271, 0.00039]
x = range(len(movie_names))"""创建画布"""
plt.figure(figsize=(15, 8), dpi=100)
"""绘制柱状图"""
plt.bar(x, tickets, color=["b", "g", "b", "g", "b", "g", "b", "g", "b"])"""修改刻度值"""
plt.xticks(x, movie_names)"""添加标签"""
plt.xlabel("电影名称")
plt.ylabel("票房数(单位:亿)")
plt.title("2021年春节档电影截至2021年2月17日票房收入")"""添加网格显示"""
plt.grid(linestyle="--", alpha=0.6)"""显示图像"""
plt.show()

2.绘制多类柱状图

上述案例显示了 2021年春节档电影截至2021年2月17日的票房总收入,但有时候电影的上映时间不尽相同,为了柱状图更有说服力,我们需要为每部电影增加一段首映日的票房收入数据,大大增加数据的说服力


思路:绘制多段柱状图的原理,是调用 plt.bar() 绘制两类柱状图之后,并指定柱段的宽度 width,再对其中一类的柱状图所在的位置平移柱段宽度 width 的距离——对 plt.bar() 中的x值进行操作来实现平移

比如说,我们设置第一类柱段的位置分别位于刻度 1、2、3、… n 上,柱段宽度均为 width=0.2,如果我们以相同的刻度位置绘制第二类柱段,那么第一类柱段就会被第二类柱段覆盖。但如果我们使第二类柱段稍微向右平移第一类柱段宽度 width 的距离,使第二类柱段位于刻度 1+width、2+width、3+width、… n+width的位置上,即位于刻度 1.2、2.2、3.2、… n+0.2的位置上,那么两类柱子就会贴合在一起,且互不遮挡,即可实现多类柱状图

当然,刻度覆盖内容的位置要位于两栋柱段的中央位置,因此刻度的标签的位置应该位于刻度

构图思路如图所示


例:对比下列电影的票房收入

电影名称
movie_names = ["唐人街探案3", "你好,李焕英", "刺杀小说家", "熊出没·狂野大陆", "新神榜:哪吒重生", "侍神令", "人潮汹涌"]

对应的票房数(单位:亿)
total_tickets = [35.65, 27.30, 5.38, 4.06, 2.40, 2.10, 1.50]

首映票房数(单位:亿)
firstday_tickets = [10.06, 2.90, 1.37, 0.7227, 0.5103, 0.8077, 0.4309]

对应的票房数首映票房数 分别是两类柱段

import matplotlib.pyplot as plt"""解决中文显示问题"""
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['font.family']='sans-serif'
plt.rcParams['axes.unicode_minus'] = False"""准备数据"""
movie_names = ["唐人街探案3", "你好,李焕英", "刺杀小说家", "熊出没·狂野大陆", "新神榜:哪吒重生", "侍神令", "人潮汹涌"]
total_tickets = [35.65, 27.30, 5.38, 4.06, 2.40, 2.10, 1.50]
firstday_tickets = [10.06, 2.90, 1.37, 0.7227, 0.5103, 0.8077, 0.4309]
"""第一类柱段位置"""
x_total_tickets = range(len(movie_names))
"""第二类柱段位置"""
x_firstday_tickets = [i + 0.2 for i in x_total_tickets]
"""刻度位置"""
x_ticks = [i + 0.1 for i in x_total_tickets]"""绘制画布"""
plt.figure(figsize=(12, 8), dpi=100)
"""绘制柱状图"""
plt.bar(x_total_tickets, total_tickets, width=0.2, label="总票房收入")
plt.bar(x_firstday_tickets, firstday_tickets, width=0.2, label="首映票房收入")"""修改刻度"""
plt.xticks(x_ticks, movie_names)"""显示图例"""
plt.legend()"""添加信息和标题"""
plt.xlabel("电影名称")
plt.ylabel("票房数(单位:亿)")
plt.title("2021年春节档电影票房收入统计")"""显示网格"""
plt.grid(linestyle="--", alpha=0.6)"""显示图像"""
plt.show()


八、直方图 hist

1.直方图相关概念

组数:在统计数据时,我们把数据按照不同的范围分成几个组,分成的组的个数称为组数

组距:每一组的包含范围

总范围 = 组数 × 组距

例:从身高范围 [150,180) 来进行分组,组距为 5cm,则分成的组分别为:

[150,155)、[155,160)、[160,165)、[165,170)、[170,175)、[175,180),因此组数为 6

2.绘制直方图

plt.hist(x, bins=None, density=None, **kwargs])

x 样本的数据集列表
bins 组数
density=None 是否将数据显示成频率,默认情况下y轴数据显示的是频数而不是频率,当指定 density=True,y轴将会显示成频率
**kwargs 是要指定的属性列表,如:color=[“r”, “g”…“b”] 指定柱状图各柱段的颜色

  • 其他函数和 折线图 用法一样,详情参考 折线图 plot 这里不再作详细介绍

设置组数 bins

通常对于数据较少的情况,分为5~12组,数据较多,更换图形显示方式

  • 组数相应的公式:组数bins = 极差/组距 = (max-min)/组距

例:电影时长分布状况

现有多部电影的时长,希望统计出这些电影时长的分布状况,每2min分为一组(即组距distance=2)

数据
time = [131, 98, 125, 131, 124, 139, 131, 117, 128, 108, 135, 138, 131, 102, 107, 114, 134, 126, 135, 112, 109, 108, 127, 121, 135, 117, 128, 136, 101, 109, 108, 121, 116, 118, 125, 129, 139, 113, 134, 106, 144, 110, 137, 137, 111, 104, 117, 100, 111, 101, 110, 105, 129, 137, 113]

组距
distance = 2

组数
bins = (max(time) - min(time)) // distance

import matplotlib.pyplot as plt"""解决中文显示问题"""
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['font.family']='sans-serif'
plt.rcParams['axes.unicode_minus'] = False"""准备数据"""
time = [131, 98, 125, 131, 124, 139, 131, 117, 128, 108, 135, 138, 131, 102, 124, 107, 114, 134, 126, 135, 112, 109, 108, 127, 121, 135, 117, 128, 136, 123, 101, 109, 108, 121, 116, 118, 125, 129, 123, 139, 113, 134, 106, 144, 110, 137, 137, 111, 104, 117, 100, 111, 101, 110, 105, 129, 137, 113, 123]
distance = 2
bins = (max(time) - min(time)) // distance
x = range(min(time), max(time) + distance, distance)"""创建画布"""
plt.figure(figsize=(10, 8), dpi=100)
"""绘制直方图"""
plt.hist(time, bins)"""修改刻度"""
plt.xticks(x)"""显示信息和标题"""
plt.xlabel("电影时长")
plt.ylabel("电影部数")
plt.title("电影时长分布状况")"""显示网格"""
plt.grid(linestyle="--", alpha=0.6)"""显示图像"""
plt.show()


指定 density=True 时:


九、饼图 pie

1.绘制饼图

plt.pie(x, labels=, autopct=, colors)

x 数量数据
labels 每部分数据对应的名称
autopct 百分比的显示格式,如:autopct="%.2f%%",则显示格式为 0.00%
colors 每部分的颜色,如:color=[“r”, “g”…“b”]

  • 其他函数和 折线图 用法一样,详情参考 折线图 plot 这里不再作详细介绍

如果显示的饼图不圆,则在显示图像之前加上下面的代码:

# 使饼图保存圆形
plt.axis("equal")

例:显示各电影的票房数占比

电影名称
movie_names = ["唐人街探案3", "你好,李焕英", "刺杀小说家", "熊出没·狂野大陆", "新神榜:哪吒重生", "侍神令", "人潮汹涌"]

对应的票房数(单位:亿)
tickets = [35.65, 27.30, 5.38, 4.06, 2.40, 2.10, 1.50]

import matplotlib.pyplot as plt"""解决中文显示问题"""
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['font.family']='sans-serif'
plt.rcParams['axes.unicode_minus'] = False"""准备数据"""
movie_names = ["唐人街探案3", "你好,李焕英", "刺杀小说家", "熊出没·狂野大陆", "新神榜:哪吒重生", "侍神令", "人潮汹涌"]
tickets = [35.65, 27.30, 5.38, 4.06, 2.40, 2.10, 1.50]"""创建画布"""
plt.figure(figsize=(10, 8), dpi=100)
"""绘制饼图"""
plt.pie(tickets, labels=movie_names, autopct="%.2f%%")"""显示图例"""
plt.legend()"""使饼图保存圆形"""
plt.axis("equal")
"""显示图像"""
plt.show()


:当分类超过9种的时候,不建议使用饼图——不直观,此时可以用柱状图来代替饼图

二、Python数据挖掘(Matplotlib库)相关推荐

  1. Ubuntu16.04 下python的matplotlib库加入中文字体(微软雅黑)

    Ubuntu16.04 下python的matplotlib库加入中文字体 一.首先安装微软雅黑字体 1.下载或者拷贝微软雅黑字体 2.将待安装的字体复制到Ubuntu下面的字体位置`/usr/sha ...

  2. python如何安装matplotlib_详解python安装matplotlib库三种失败情况

    (可能只有最后一句命令有用,可能全篇都没用) (小白方法,可能只适用于本人情况) 安装matplotlib时,出现的三种失败情况 1.read timed out 一开始我在pycharm终端使用pi ...

  3. python 颜色_如何使用python中matplotlib库分析图像颜色

    用代码分析图像可能很困难.你如何使代码"理解"图像的上下文? 通常,使用AI分析图像的第一步 是找到主要颜色.在如何使用python中matplotlib库分析图像颜色中,我们将使 ...

  4. Python的matplotlib库画图不能显示中文问题解决

    Python的matplotlib库画图不能显示中文问题解决 参考文章: (1)Python的matplotlib库画图不能显示中文问题解决 (2)https://www.cnblogs.com/CQ ...

  5. Python学习-Matplotlib库绘制简单点阵图、线型图操作

    Python学习-Matplotlib库绘制简单散点图图和线型图.标签设置以及刻度线设置操作 目录 1.Matplotlib绘图细节的简单理解 2.绘制点图.线型图 3.给图表设置复杂标注 4.移动刻 ...

  6. python的matplotlib库绘制条形图、散点图、饼图、折线图

    python的matplotlib库绘制条形图.散点图.饼图.折线图 当我们学会了爬虫,抓取到了一些数据,接下来就是做数据分析了.本文章介绍绘制图形的基本代码. 打开cmd用pip 安装,若输入pip ...

  7. Python 之matplotlib库的安装及Read timed out Error的解决方案

    Python 之matplotlib库的安装 打开cmd窗口.点击开始栏,搜索cmd并打开. 找到安装的Python路径.可以通过右键点击Python快捷键,查找文件路径.(博主电脑并未分盘,故安装到 ...

  8. python的matplotlib库怎么安装,用pip给python安装matplotlib库的详细教程

    Matplotlib 是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形. 1.首先在python里安装pip,打开安装python的文件夹,找到pyt ...

  9. python 二维强度图_荐 python数据分析matplotlib库使用之二维图形绘制

    本篇内容会在后期不定时更新 什么是matplotlib matplotlib是最流行的python底层绘图库,主要做数据可视化图表. 为什么要学习matplotlib 能将数据进行可视化,更直观的呈现 ...

  10. python中matplotlib库legend_matplotlib中的legend()—显示图例

    legend()的一个用法: 当我们有多个 axes时,我们如何把它们的图例放在一起呢?? 我们可以这么做: import numpy as np x = np.arange(1, 11) fig = ...

最新文章

  1. java中怪物移动_java中两大怪物,附带面试题!
  2. 技术领导力实战笔记一
  3. Google 首次引入数据中心液体冷却
  4. 安装python的redis模块
  5. HDU 2653 (记忆化BFS搜索+优先队列)
  6. 【测试】软件测试计划的编写
  7. 大数据时代了解一些问题
  8. python常用_30个Python常用小技巧
  9. java 过载_java – ExecutorService,避免任务队列过载的标准方式
  10. android原生请求权限,ReactNative调用Android原生中的权限请求
  11. Data Lake Analytics,大数据的ETL神器! 1
  12. 【病毒程序】发一个无聊的小病毒(无限弹窗)
  13. linux下载m3u8工具,[2020.11.2更新]m3u8命令行下载工具,支持windows和linux
  14. 专家不确定伊朗是否是银行 DDoS 攻击的幕后黑手
  15. uniapp浏览pdf文件
  16. 升入高中,如何规划数学竞赛
  17. 俞敏洪沉默,新东方落泪
  18. php 上拉加载下拉刷新页面,html下拉刷新上拉加载Refresher3.0
  19. jquery对cookie进行读取、写入和删除
  20. h61 nvme硬盘_切割SN520amp;amp;对比主流NVME2242amp;amp;无硬盘盒迁移系统

热门文章

  1. pict 使用初解(右键管理员模式打开不cmd)
  2. Java 静态方法与非静态方法的调用
  3. 除了PS,还有哪些软件需要掌握
  4. Openlayers4加载WMS地图
  5. 解决CSV文件打开乱码的问题
  6. 6.23(343,96)
  7. htc vive游戏开发_如何设置HTC Vive并开始玩游戏
  8. linux下运行lvgl 模拟器
  9. 混合硬盘计算机,三款游戏体验混合硬盘的性能表现
  10. 集成环境注意事项小结