目录

绘制基础

点线绘制

柱状图

饼状图

直方图

三维图


Matplotlib是一个Python的2D 绘图库。通过Matplotib, 开发者可以仅需要几行代码,便可以生成绘图,直方图,功率谱,条形图,错误图,散点图等。Matplotib,可让数据可视化,更直观的真实给用户。使数据更加客观、更具有说服力。Matplotlib 是Python的库,又是开发中常用的库。

matplotlib开发环境搭建:如果使用的是Anaconda Python开发环境,那么Matplotib己经被集成进Anaconda,并不需要单独安装。如果使用的是标准的Python开发环境则需安装:pip install matplotlib,Matplotlib官方网站:Matplotlib — Visualization with Python

绘制基础

在使用Matplotlib绘制图形时,其中有两个最为常用的场景。一个是画点,一个是画线。pyplot基本方法的使用如下表:

Python绘图需要的库 python可以画图的库_开发语言

点线绘制

使用plot和scatter绘制出来的图形没有区别,但使用plot绘制图形的速度优于scatter。如果画一堆点,而且点的形式没有差别,则使用plot;如果点的形式有差别(指点的大小和颜色不同)则必须使用scatter。线的形状和颜色:

Python绘图需要的库 python可以画图的库_Python绘图需要的库_02

Python绘图需要的库 python可以画图的库_Python绘图需要的库_03

 

Python绘图需要的库 python可以画图的库_python_04

 

Python绘图需要的库 python可以画图的库_python_05

 

import matplotlib.pyplot as pltimport numpy as np


def zhixian():
    plt.plot([2, 5, ], [7, 9])  # 绘制直线

def zhexian():
    x = range(-50, 51)
    y = [i ** 3 for i in x]
    plt.plot(x, y, linewidth=5)  # linewidth线条粗细参数
    plt.title('一元三次方程坐标图', fontsize=24)  # 图标标题
    plt.xlabel('x值', fontsize=12)  # x坐标轴标签
    plt.ylabel('y值:x^3', fontsize=12)  # y坐标轴标签
    plt.rcParams['font.sans-serif'] = ['SimHei']  # matplotlib默认不支持中文,解决正常显示中文标签
    plt.rcParams['axes.unicode_minus'] = False  # 解决负坐标不显示的问题
    plt.savefig('一元三次图.jpg')  # 保存图片,不指定图片格式时默认保存为.png格式


def zyxtest(model=0):
    x = np.linspace(0, 10, 100)  # 生成1-10之间的100个等差数列
    sin_y = np.sin(x)
    cos_y = np.cos(x)
    if model == 0:  # 如果是0,线条绘制到同一个坐标中
        plt.plot(x, sin_y)  # 绘制正弦曲线
        plt.plot(x, cos_y)  # 绘制余弦曲线
    else:  # 划分区域绘制 subplot参数:划分的行数,划分的列数,所在行列的区域位置(第几块位置)
        plt.subplot(2, 3, 1)
        plt.plot(x, sin_y)
        plt.subplot(2, 3, 5)
        plt.plot(x, cos_y)


def change_xy():
    x = range(-10, 11)
    y = [i ** 2 for i in x]
    plt.xlim(-20, 20)  # 修改x轴坐标
    plt.ylim(-120, 120)  # 修改y轴坐标
    plt.plot(x, y)


def Scatter():
    x = np.linspace(0, 10, 100)
    sin_y = np.sin(x)
    # plt.scatter(x,sin_y)   # 散点图
    plt.plot(x, sin_y, 'o')  # 指定点的种类画散点图


def random_Scatter():
    #注意:点的个数和颜色的个数要相同。点的个数和点大小的个数可以不同,如果点的个数大于大小的个数,则会循环获取大小
    np.random.seed(0)  # 执行多次,每次获取同样的随机数
    x = np.random.rand(100)
    y = np.random.rand(100)
    size = np.random.rand(100) * 300
    color = np.random.rand(100)
    plt.scatter(x, y, s=size, c=color,alpha=0.8)


if __name__ == '__main__':
    random_Scatter()
    plt.show()import matplotlib.pyplot as plt# 设置线条颜色样式和图例
x = range(1, 11)
y1, y2, y3 = [i for i in x], [i + 1 for i in x], [i + 2 for i in x]

plt.plot(x, y1, 'or', label='红色点')  # label图例名
plt.plot(x, y2, '*g', label='绿色*')
plt.plot(x, y3, ':y', label='黄虚线')

# 添加图例右下角lower right(左上角upper left);边框;透明度;阴影;边框宽度
plt.legend(loc='lower right', fancybox=True, framealpha=0.1, shadow=True, borderpad=1)
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.show()

柱状图

使用bar函数绘制柱状图,柱状图需要水平的x坐标值,以及每一个x坐标值对应的y坐标值,从而形成柱状的图,柱状图主要用来纵向对比和横向对比。需要注意的是bar函数的宽度并不是像素宽度。bar 函数会根据二维坐标系的尺寸,以及x坐标值的多少,自动确定每一个柱的宽度,而widh指定的宽度就是这个标准柱宽度的倍数。该参数值可以是浮点数,如0.5, 表示柱的宽度是标准宽度的0.5倍。
import matplotlib.pyplot as plt


def bartest():
    x = ['第一季度', '第二季度', '第三季度', '第四季度']
    y = [-1011, 1500, -1390, 1280]
    br = plt.bar(x, y, width=0.3)  # width修改柱状图的宽度
    # plt.xticks(x1,x2)   # 修改x坐标轴的值,参数为原来的值和新值
    # plt.yticks(y1,y2)   # 修改y坐标轴的值
    plt.axhline(0, color='red', linewidth=2)  # 添加分割线,0表示y=0的直线
    for bar, width in zip(br, y):  # 通过判断正负显示不同颜色
        if width < 0:
            bar.set(color='yellow')


def barhtest():
    x = ['第一季度', '第二季度', '第三季度', '第四季度']
    y = [-1011, 1500, -1390, 1280]
    bh = plt.barh(x, y, height=0.3)  # width修改柱状图的宽度
    plt.axvline(0, color='yellow', linewidth=2)  # 添加分割线,0表示x=0的直线
    for bar, height in zip(bh, y):
        if height < 0:
            bar.set(color='green')


if __name__ == '__main__':
    plt.subplot(2, 2, 1)
    bartest()

    plt.subplot(2, 2, 4)
    barhtest()

    plt.rcParams['axes.unicode_minus'] = False
    plt.rcParams['font.sans-serif'] = ['SimHei']
    plt.show()import matplotlib.pyplot as plt
import numpy as np


def test():
    x = [1, 2, 3, 4]
    y1 = np.random.randint(100, 500, size=4)
    y2 = np.random.randint(100, 500, size=4)
    y3 = np.random.randint(100, 500, size=4)
    width = 0.2
    plt.bar(x, y1, alpha=0.5, width=width, label='季度第一月')
    plt.bar([i + width for i in x], y2, alpha=0.5, width=width, label='季度第二月')
    plt.bar([i + width * 2 for i in x], y3, alpha=0.5, width=width, label='季度第三月')
    x_label = ['第{}季度'.format(i) for i in x]
    plt.xticks([i + width for i in x], x_label)
    plt.ylim(0, 650)


if __name__ == '__main__':
    test()
    plt.legend()
    plt.rcParams['font.sans-serif'] = ['SimHei']
    plt.show()


Python绘图需要的库 python可以画图的库_后端_06


饼状图

import matplotlib.pyplot as plt

def bingtu():
    python = 10.95
    c = 11.62
    java = 11.17
    vb = 4.5
    other = (100 - python - c - java - vb)
    labels = ['python', 'c', 'java', 'vb', 'other']
    # colors = ['']
    # labels:名称、colors:颜色、explode:分裂、autopct:显示百分比
    paches, texts, autotexts = plt.pie([python, c, java, vb, other], labels=labels, explode=[0.1, 0, 0, 0, 0],
                                       autopct='%0.1f%%')
    for text in autotexts:
        text.set_color('white')  # 设置饼状图的字体颜色
        text.set_fontsize(10)
    for text in texts:
        text.set_fontsize(20)  # 设置饼状图的字体大小

if __name__ == '__main__':
    bingtu()
    plt.show()

Python绘图需要的库 python可以画图的库_柱状图_07

直方图

使用hist函数绘制直方图,直方图与柱状图的分格类似,都是由若干个柱组成,但直方图和柱状图的含义却有很大的差异。直方图是用来观察分布状态的,而柱状图是用来看每一个X坐标对应的Y的值的。也就是说,直方图关注的是分布并不关心具体的某个值,而柱状图关心的是具体的某个值。
import matplotlib.pyplot as plt
import numpy as np


def zft1():
    x = np.random.randn(1000)
    plt.hist(x, bins=100)  # bins修改柱的宽度


def zft2():
    # 正态分布直方图
    x, y, z = np.random.normal(0, 0.8, 1000), np.random.normal(-2, 1, 1000), np.random.normal(1, 2, 1000)
    kwargs = dict(bins=100, alpha=0.5)
    plt.hist(x, **kwargs)
    plt.hist(y, **kwargs)
    plt.hist(z, **kwargs)


def dgx():
    x = np.linspace(-10, 10.100)
    y = np.linspace(-10, 10, 100)
    # 计算x和y的相交点a
    X, Y = np.meshgrid(x, y)
    # 计算Z的坐标
    Z = np.sqrt(X ** 2 + Y ** 2)
    plt.contourf(X, Y, Z)
    # plt.contour(X, Y, Z)
    # 颜色越深表示值越小,中间的黑色表示z=0.


if __name__ == '__main__':
    dgx()
    plt.show()


Python绘图需要的库 python可以画图的库_开发语言_08

三维图

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# 创建X、Y、Z坐标
X = [10, 8, 4, 7]
Y = [5, 4, 4, 3]
Z = [10, 100, 50, 45]
fig = plt.figure()
# 创建一个Axes3D子图放到figure画布里面
ax = Axes3D(fig)
ax.plot_trisurf(X, Y, Z)
plt.show()

 

Python绘图需要的库 python可以画图的库_柱状图_09