欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python matplotlib库基本二维绘图

程序员文章站 2022-07-21 11:28:31
pyplot、plot()、axis()、xlim()、ylim()、xticks()、yticks()、xlable()、ylable()、legend()、text()、title()、bar()、scatter()、pie()、subplot()、中文显示问题...

这次的情况与以往不同,因为要保存许多图片,所以加了一个接合路径的函数
左右拆分后,就可以很直观的展示某一段代码对应的图。
Python matplotlib库基本二维绘图
有一些函数的参数不是很完整(主要列出了重要,必要的参数),如果想深入了解此函数的功能,点击函数,按下快捷键F12(基于VS Code)即可查看源文件。

比如你想深入了解下subplot()函数,可以看官方的解释和例子。
Python matplotlib库基本二维绘图言回正传
复制以下的代码,选择运行的函数,验证有关二维绘图的操作。
相关参考:Python语言程序设计(上海交通大学出版社 赵璐主编)<<----传送门
原谅我没有找到电子版,不然一定爬下来

import matplotlib.pyplot as plt
import matplotlib
import numpy as np
import sys
import os


def getFile_path(filename):
    '''
    无论用的是什么系统,当前工作目录是哪个文件夹

    都能准确获取源代码同级目录下的文件完整路径
    '''
    workpath = os.path.split(sys.argv[0])[0]
    return os.path.join(workpath, filename)


# 演示-----------------------------------------------------------------------------------------------
def demo(filepath):
    """  
    以下仅为简单的展示,具体函数功能在相关测试函数中介绍

    """
    # 设置中文字体为黑体
    matplotlib.rcParams['font.family'] = ['SimHei']

    # 设置负号显示正常
    matplotlib.rcParams['axes.unicode_minus'] = False

    x = np.linspace(0, 2*np.pi, 100)
    y = np.sin(x)
    plt.plot(x, y, 'r')
    f1 = plt.figure(1)
    plt.title('我是标题')
    plt.xlabel('我是x轴标签')
    plt.ylabel('我是y轴标签')
    plt.text(np.pi, 0.6, '我是图文字')
    plt.ylim(-2, 2)
    plt.legend(labels=['我是图例'])
    plt.savefig(filepath+'y=sin(x).png')  # 保存图片
    plt.cla()  # 清除figure中活动的axes


# plot函数的相关测试--------------------------------------------------------------------------------------
def pyplot_test(filepath):
    """  
    plot(x,y,s,linewidth)  在二维直角坐标系中绘制直线、曲线、离散的点,返回一个列表对象

    x:横坐标轴的取值范围,可选。省略时默认用y数据集的索引作为x

    y:与x对应的纵坐标轴的取值范围,必选。

    s:控制线型的格式字符串,可选。省略时采用默认格式

    linewidth:线的宽度

    """

    plt.plot([1, 2, 3])  # 绘制直线 y=x+1
    plt.savefig(filepath+'y=x+1.png')
    plt.cla()

    # 通过设置线型的格式字符串来控制点线的颜色、风格
    x = y = np.arange(10)
    plt.plot(x, y, 'r*:')
    plt.savefig(filepath+'y=x')
    plt.cla()

    # plot还支持一次性绘制多个图形
    x = np.arange(10)
    y1 = x
    y2 = 2*x
    y3 = 3*x
    plt.plot(x, y1, 'ro--', x, y2, 'gv:', x, y3, 'bs-')
    plt.savefig(filepath+'三条线.png')
    plt.cla()


# pyplot属性测试---------------------------------------------------------------------------------------
def pyplot_attribute(filepath):
    x = np.arange(10)
    y1 = x
    y2 = 2*x
    y3 = 3*x
    plt.plot(x, y1, 'ro--', x, y2, 'gv:', x, y3, 'bs-')
    plt.axis('scaled')  # 设置x轴y轴按实际比例显示
    plt.xlim(0, 10)  # 设置x轴的区间
    plt.ylim(0, 30)  # 设置y轴的区间
    xmin, xmax, ymin, ymax = plt.axis()  # 获取当前x轴和y轴的区间值
    print('x轴[{},{}]y轴[{},{}]'.format(xmin, xmax, ymin, ymax))
    plt.xticks([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
    plt.yticks([5, 10, 15, 20, 25, 30],
               ['a', 'b', 'c', 'd', 'e', 'f'])  # 'a'与5对应,'b'与10对应
    y_ticks, labels = plt.yticks()  # 返回y轴刻度值和对应标签
    print(y_ticks)
    print(type(labels))
    for label in labels:  # 输出y轴的刻度标签
        print(label)
    plt.xlabel('x-axis')  # 设置x轴标签
    plt.ylabel('y-axis')  # 设置y轴标签
    plt.legend(['y1=x', 'y2=2x', 'y3=3x'])  # 添加图例
    plt.text(4, 2, 'TEXT')  # 转换成你想要的显示文本
    plt.savefig(filepath+'三条带属性的线.png')
    plt.cla()


# 绘图函数测试-------------------------------------------------------------------------------------------
def drawing_test(filepath):
    """  
    boxplot()               箱型图

    bar()                   竖向条形图

    barh()                  横向条形图

    contour()               等高线

    hist()                  直方图

    pie()                   饼图

    plot_date()             包含日期型数据的图

    polar()                 极坐标图

    psd()                   功率谱密度图

    scatter()               散点图

    specgram()              频谱图

    stem()                  火柴杆图

    step()                  步阶图

    """
    # bar(x,height) x:x轴对应的值,height:与x对应的高度值
    x = np.arange(7)
    height = [3, 4, 7, 6, 2, 8, 9]
    plt.bar(x, height)
    plt.savefig(filepath+'横向条形图.png')
    plt.cla()

    # scatter(x,y)
    plt.scatter(x, height)
    plt.savefig(filepath+'散点图')
    plt.cla()

    # pie(x,explode=None,lables=None,autopct=None,shadow=False)
    # x:需要绘制饼图的数据集
    # explode:设置饼块分离,默认为空(不分离),非0值将分离
    # lables:设置饼块对应标签,默认为空
    # autopct:设置饼块显示占比值,默认为空
    # shadow:设置饼图是否有阴影,即立体效果,默认为False(即饼图是一个平面)
    Lables = 'Class-A', 'Class-B', 'Class-C', 'Class-D'  # 饼块标签
    data = [15, 30, 45, 10]
    Explode = (0, 0.1, 0, 0)
    plt.pie(data, explode=Explode, labels=Lables, autopct='%.2f%%')
    plt.savefig(filepath+'饼图.png')
    plt.cla()


# subplot(),绘制子图-----------------------------------------------------------------------------------
def subplot_test(filepath):
    """  
    在一个区域绘制多个不重叠的图形

    subplot(nrows,ncols,index):在绘图区域创建子绘图区域

    nrows:将绘图区分割成nrows行

    ncols:将绘图区分割成ncols列

    index:指定当前子绘图区域的索引

    子区索引按照行优先顺序,从1开始编号,步长为1,依次递增

    """
    plt.subplot(2, 2, 1)
    plt.bar(range(7), [3, 4, 7, 6, 2, 8, 9])
    plt.subplot(2, 2, 2)
    plt.plot(range(7), [3, 4, 7, 6, 2, 8, 9])
    plt.subplot(2, 2, 3)
    plt.scatter(range(7), [3, 4, 7, 6, 2, 8, 9])
    plt.subplot(2, 2, 4)
    plt.barh(range(7), [3, 4, 7, 6, 2, 8, 9])
    plt.savefig(filepath+'绘制子图.png')
    plt.cla()


# 中文显示问题-------------------------------------------------------------------------------------------
def chinese_test(filepath):
    """  
    默认状态下,matplotlib库无法在图表中正常显示中文

    需要使用系统字体,修改matplotlib库中rcParams参数字典的'font.family'键对应的值

    常见的系统字体:

        'Simhei'            黑体

        'Kaiti'             楷体

        'Microsoft YaHei'   微软雅黑

        ......

    """
    matplotlib.rcParams['font.family'] = 'Kaiti'
    plt.plot([1, 2, 4], [1, 2, 3])
    plt.title('坐标系标题')
    plt.xlabel('时间(s)')
    plt.ylabel('范围(m)')
    plt.savefig(filepath+'中文显示.png')
    plt.cla()

    # 还可以单独指定某一部分的字体,在函数中传递一个中文字体给参数fontproperties
    plt.plot([1, 2, 4], [1, 2, 3])
    plt.title('坐标系标题', fontproperties='Simhei')
    plt.xlabel('时间(s)', fontproperties='Kaiti')
    plt.ylabel('范围(m)', fontproperties='Microsoft YaHei')
    plt.savefig(filepath+'多种字体.png')


# 选择要验证的函数-----------------------------------------------------------------------------------------
def main():
    file_name = 'image\\'
    file_path = getFile_path(file_name)
    # demo(file_path)
    # pyplot_test(file_path)
    # pyplot_attribute(file_path)
    # drawing_test(file_path)
    # subplot_test(file_path)
    # chinese_test(file_path)


if __name__ == "__main__":
    main()

相关参考:Python语言程序设计(上海交通大学出版社 赵璐主编)<<----传送门

如有错误,欢迎私信纠正
技术永无止境,谢谢支持!

本文地址:https://blog.csdn.net/pineapple_C/article/details/107128060