使用matplotlib绘制散点图


title: 使用matplotlib绘制散点图
date: 2019-10-6 10:35:37
author: 无涯明月
toc: true
categories: 机器学习
tags:

  • Machine Learning

简单案例

import matplotlib.pyplot as plt
import numpy as np

if __name__ == '__main__':
    x = np.linspace(0, 10, 1000)  #生成从0~10的1000个均匀数
    y = np.sin(x)
    plt.figure(figsize=(8, 4), dpi=72) # 大小是8英寸*4英寸,dpi为设置图形每英寸的点数,默认值72
    plt.plot(x, y, color='r', label='$sin(x)$')  # label='$sin(x)$'设置图例

    plt.xlabel('x')
    plt.ylabel('y')
    plt.title('pyplot_example')
    plt.legend()  # 图表的图例,默认会自动寻找最佳位置
    plt.show()

运行结果:
在这里插入图片描述

简单理解一下

  1. plt.figure(figsize=(8, 4), dpi=72)
    是设置画图窗口大小,单位是英寸,每英寸72个像素点。
  2. plt.plot(x, y, color='r', label='$sin(x)$')
    由于我们的画图窗口没有设置拆分,孤儿这里默认在画图窗口上的画图就是铺满整个窗口,故而这里没有指定我们所用的画布是哪个。

第二个案例

这里就是一个画图窗口拆分成我们想要的块数,然后在每个画布块中绘制不同的图像内容。
如:

import matplotlib.pyplot as plt
import numpy as np

if __name__ == '__main__':
    x = np.linspace(0, 10, 1000)  #生成从0~10的1000个均匀数
    y = np.sin(x)
    plt.figure(figsize=(8, 4), dpi=72) # 大小是8英寸*4英寸,dpi为设置图形每英寸的点数,默认值72

    axis = plt.subplot(1, 3, 1)  #  划分窗口 1行3列, 返回第一个画布对象(编号顺序为从左到右、从上到下,从1开始。)
    axis.plot(x, y, color='r', label='$sin(x)$')

    axis.set_xlabel("x")
    axis.set_ylabel('y')
    axis.set_title('Sin')
    axis.legend()  # 图表的图例,默认会自动寻找最佳位置

    # 第二个
    axis = plt.subplot(132) # 如果这三个参数值都小于10,可以去掉逗号写。
    axis.plot(x, np.cos(x), color='r', label='$cos(x)$')

    axis.set_xlabel("x")
    axis.set_ylabel('y')
    axis.set_title('Cos')
    axis.legend()  # 图表的图例,默认会自动寻找最佳位置
    plt.show()

结果:
在这里插入图片描述

可以看出设置的方法略微有点差异,不过逻辑类似。这里就说明了。

同时开多个画图窗口

import matplotlib.pyplot as plt
import numpy as np

if __name__ == '__main__':

    plt.figure(1)  # 创建窗口1
    plt.figure(2)  # 创建窗口2
    ax1 = plt.subplot(1, 2, 1)  # 一行两列的画图窗口的第一个画布
    ax2 = plt.subplot(1, 2, 2)  # 一行两列的画图窗口的第二个画布

    x = np.linspace(0, 3, 100) # 生成从0~3的100个均匀数

    for i in range(5):
        plt.figure(1)           # 选取figure(1)
        plt.plot(x, np.exp(i * x / 3))  # 做图

        plt.sca(ax1)            # 选取ax1
        plt.plot(x, np.sin(i * x))  # 做图

        plt.sca(ax2)            # 选取ax2
        plt.plot(x, np.cos(i * x))  # 做图
    plt.show()

结果:
在这里插入图片描述

另一种方式

import matplotlib.pyplot as plt
import numpy as np

if __name__ == '__main__':

    fig, axs = plt.subplots(1, 3, figsize=(5, 2)) # 1行3个5x2大小的子图。
    x = np.linspace(0, 30, 100)
    axs[0].plot(x, np.cos(x))
    axs[1].plot(x, np.tan(x))
    axs[2].plot(x, np.exp(x))

    plt.show()

结果:
在这里插入图片描述

绘制散点图

相信通过上面的案例,知道了什么是窗口、画布,知道了如何在窗口中绘制子图等。接着就简单说说如何绘制散点图。

简单案例

先看一个简单的案例:

import matplotlib.pyplot as plt
import numpy as np

if __name__ == '__main__':
    # 设置点的个数
    N = 20
    # 设置窗口大小
    plt.figure(figsize=(8, 5), dpi=50)
    x = np.random.randn(N)
    y = np.random.randn(N)
    plt.scatter(x, y)
    plt.show()

结果:
在这里插入图片描述
案例可以看出,其实这里的重点就在于如何使用scatter函数:

scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None,vmax=None, alpha=None, linewidths=None, verts=None, edgecolors=None,hold=None, data=None, * *kwargs):
用CTRL+鼠标左键追踪一下可见

扫描二维码关注公众号,回复: 8905233 查看本文章

scatter官方文档地址
x,y:是构成点集的数组;
s:是点的大小,可以是一个值,也可以是一个数组,如:plt.scatter(x, y, s=np.linspace(50, 800, N) , c='#F86747')
c:是颜色,默认蓝色,可以使用如’r’,'g’之类的,也可以使用十六进制的,如:c='#F86747'。和s类似,可以是一个颜色的值,也可以是一个颜色值得序列;
marker:定义绘制散点图的每个点的形状,默认是实体圆圈,也就是"o",其余的形状如下图:
在这里插入图片描述

案例:

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.font_manager import FontProperties

if __name__ == '__main__':
    # 设置点的个数
    N = 10
    # 设置窗口大小
    plt.figure(figsize=(8, 5), dpi=50)
    x = np.random.randn(N)
    y = np.random.randn(N)
    # 散点的大小,使用值得序列
    size = np.linspace(50, 800, N)
    # 颜色,使用颜色值的序列
    colors = np.array(['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd', '#8c564b', '#e377c2', '#7f7f7f', '#bcbd22', '#17becf'])

    plt.scatter(x, y, s=size, c=colors, marker="p")
    # 设置字体
    font = FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=24)
    plt.xlabel("X轴", FontProperties=font)
    plt.ylabel("Y轴", FontProperties=font)
    plt.title("绘制散点图案例", FontProperties=font)
    plt.show()

结果:
在这里插入图片描述

最后,值得注意的是:matplotlib库没有中文字体
在设置label的时候,我们需要指定使用的是什么字体。可以用系统自带的字体样式。

发布了169 篇原创文章 · 获赞 139 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/qq_26460841/article/details/102602630