Python- matplotlib使用方法大全

Matplotlib使用方法大全

一:绘制基础的折线图

 1 #encoding:utf-8
 2 import matplotlib.pyplot as plt
 3 
 4 def test1():
 5     # 基础折线图绘制
 6     # 绘制(0,0),(1,1),(2,1),(3,3)四个点连成的折线
 7     x = [0, 1, 2, 3]
 8     y = [0, 1, 1, 3]
 9     plt.plot(x, y)
10     plt.show()

 二: 修改折线图颜色或者线的形状

def test2():
    # 修改折线图的颜色 / 线的形状
    x = [0, 1, 2, 3]
    y = [0, 1, 1, 3]
    plt.plot(x, y, "r")  # 修改颜色, rgb=红绿蓝
    plt.plot(x, y, "--")    # 修改线的形状为虚线, 默认为折线"-", "o" 为点 “^" 为三角
    plt.plot(x, y, "g--")    #  一起修改为绿色虚线
    plt.axis([1, 6, 0, 5])   # 修改坐标轴x刻度显示
    plt.show()

 三:只传入一维数据

plt.plot(x, y)接收点集(x, y),当只输入一维数据的时候默认当做y坐标轴处理,x坐标轴默认为为[0,1,2....]

def test3():
    y = [1, 1, 1, 1]
    plt.plot(y, "ro")
    plt.show()

四:当传入list时也会转成numpy.array(性能会好些)

import numpy as np
def test4():
    t1 = [1, 5, 1, 5]
    t2 = np.array([5, 1, 5, 1])
    plt.plot(t1, "g-")
    plt.plot(t2, "ro")
    plt.show()

 五:一张图中显示多张图表

  在例4中分别使用了两次plt.plot()进行加载,可以用一条语句

  plt.plot(t1, "b--",t2, "r--")

  

def test5():
    # 在一张图表中显示多个图表
    x1 = [1, 2, 3, 4]
    y1 = [1, 2, 3, 4]
    x2 = [2, 4, 6, 8]
    y2 = [4, 8, 12, 16]
    plt.plot(x1, y1, "r-", x2,  y2, "g--")
    plt.show()

 六:绘制标准函数sin()与cos()

def test6():
    # 绘制标准函数曲线: sin()与cos()
    # 绘制f(x)=sin(x) 和g(x)=cos(x) 在x∈[0,20]中的图像
    x = np.arange(0, 20, 0.01)
    plt.plot(x, np.sin(x), "r-", x, np.cos(x), "g--")
    # x坐标轴区间: [0, 20] y坐标轴区间: [-3, 3]
    plt.axis([0, 20, -3, 3])
    plt.show()

七: 显示背景网格线

def test7():
    x = np.arange(0, 20, 0.01)
    plt.plot(x, x**2)
    # 设置是否显示网格线
    plt.grid(True)
    plt.show()

 八: 对图表进行标注及对文本属性的设置

def test8():
    # 增加标注
    x = np.arange(0, 20, 0.01)
    plt.plot(x, x**2)
    # 设置x, y坐标轴的名称
# 对x坐标轴的文本内容进行设置
plt.xlabel("Money Earned", color="r", fontsize=20)
# plt.xlabel("Money Earned") plt.ylabel("Consume Level") # 显示网格 plt.grid(True) # 增加标题 plt.title("Figure.1") # 图内文字 # 指定x坐标轴和y坐标轴,文字本身 plt.text(2.5, 100, "TEXT1") # 箭头指示 # 指定文字, 箭头指定方向,文字显示的坐标, 箭头的属性 plt.annotate("max value", xy=(20, 400), xytext=(12.5, 400), arrowprops=dict(facecolor="black", shrink=0.05),) plt.show()

 对文本属性设置参数简介(https://matplotlib.org/api/text_api.html#matplotlib.text.Text)

常用参数介绍:

 九: 设置曲线属性

plt.plot()返回matplotlib.lines.Line2D, 可以通过变量获得并修改曲线Line2D的属性

def test9():
    # 设置曲线属性
    # plt.plot()返回matplotlib.lines.Line2D,可以通过变量获得并修改曲线Line2D的属性
    x = np.arange(0, 10, 0.01)
    line1, line2 = plt.plot(x, np.sin(x), "-", x, np.cos(x), "--")
    plt.setp(line1, color="r", linewidth="11.0")   # 设置曲线的宽度
    plt.show()

 十: 绘制图形: 圆形,矩形,椭圆

import matplotlib.patches as patches
def test10():
    # 绘制圆形
    fig = plt.figure()
    ax1 = fig.add_subplot(111, aspect="equal")    # 1X1一张图中的第一张, equal为等宽显示
    rec = patches.Rectangle((0, 0), 8, 4)    # 顶点坐标(0,0) 宽w=8, 高h=4
    cir = patches.Circle((8, 8), 2)    # 圆心坐标(8,8) 半径r
    ell = patches.Ellipse((2, 8), 6, 3)    # 椭圆左顶点坐标(2, 8) 长轴6 短轴3
    ax1.add_patch(rec)
    ax1.add_patch(cir)
    ax1.add_patch(ell)
    plt.plot()
    plt.show()

 十一: 绘制标准正态分布-直方图

plt.hist() 绘制直方图

def test11():
    # 绘制直方图-标准正态分布
    mu, sigma = 0, 1
    x = np.random.normal(mu, sigma, 10000)
    # x: 一维数组,  : 直方图的柱数,默认为10, facecolor: 直方图颜色 alpha: 透明度
    # 返回值: n:直方图向量  bins: 返回各个bin的区间范围  patches: 以list形式返回每个bin里面包含的数据
    plt.hist(x, bins=100, facecolor="g", alpha=0.75)
    plt.text(-3, 250, r'$mu=0, sigma=1$')
    plt.grid(True)
    plt.show()

 十二::绘制散点图

plt.scatter() 绘制散点图

def test12():
    # 绘制散点图
    # x: x坐标轴集合  y: y坐标轴集合  c : 散点的颜色数目  s: 散点的大小数目  alpha: 透明度
    x = np.random.normal(0, 1, 1000)
    y = np.random.normal(0, 1, 1000)
    c = np.random.rand(1000)
    s = np.random.rand(100)*100   # 100种大小
    plt.scatter(x, y, c=c, s=s, alpha=0.5)
    plt.grid(True)
    plt.show()

十三: 显示多个图表

方法一:

def test13():
    # 显示多个图表
    names = ['Anime', 'Comic', 'Game']
    values = [30, 10, 20]
    plt.subplot(221)   # 构建2X2张图中的第一张子图
    plt.bar(names, values)    # 统计图
    plt.subplot(222)
    plt.scatter(names, values)
    plt.subplot(223)
    plt.plot(names, values)
    plt.suptitle("三种图显示", fontname="SimHei")
    plt.show()

方法二:

def test14():
    # 上述是每次构造一个子图,然后在子图中绘制.也可以先构造所有的子图,再通过下标指定在哪张子图中绘制
    fig, axes = plt.subplots(2, 2)
    names = ['Anime', 'Comic', 'Game']
    values = [30, 10, 20]
    axes[0, 1].plot(names, values)
    axes[1, 0].bar(names, values)
    axes[1, 1].scatter(names, values)
    plt.show()

 十四:子图间距的调整

def test15():
    # 调整子图间隔
    # #构造2x2的子图,子图共享x,y轴
    fig, axes = plt.subplots(2, 2, sharex=True, sharey=True)
    for i in range(2):
        for j in range(2):
            axes[i, j].hist(np.random.rand(500), bins=100, alpha=0.7, color="k")
    plt.subplots_adjust(hspace=0, wspace=0)  # 修改内部的宽,高间距为0
    plt.show()

 十五: 绘制柱状图

垂直柱状图plt.bar(names,values)
水平柱状图plt.barh(names,values)

def test16():
    # 垂直柱状图 plt.bar(name, values)
    # 水平柱状图 plt.barh(name, values)
    x = np.random.randint(1, 10, 8)
    label = list("abcdefgh")
    plt.subplot(221)
    plt.bar(label, x)
    plt.subplot(222)
    plt.barh(label, x)
    plt.show()

 pd.DataFrame.plot.bar()绘制柱形图

import pandas as pd
def test17():
    x = np.random.randint(1, 10, 8)
    y = np.random.randint(1, 10, 8)
    # index为分类, columns为数据的柱状图
    data = pd.DataFrame([x, y], index=["X", "Y"], columns=list("abcdefgh"))
    # data.plot.bar()
    data.transpose().plot.bar()  # data.transpose()转置
    plt.show()

                            

原文地址:https://www.cnblogs.com/zhouzetian/p/12726528.html