Matplotlib Python的基本操作

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_38002337/article/details/80990760
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib

plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号

# 线状图  plt.plot
def tes_plot():
    x = np.linspace(-np.pi*4, np.pi*4, 100)
    y = np.sin(x)

    # 设置x轴的刻度
    plt.xticks(np.arange(-np.pi*4, np.pi*5, np.pi*2),
               [r"$-4π$", r"$-2π$", r"$0$", r"$2π$", r"$4π$"])
    # plt.yticks([0.2,0.7,0.9],["不及格 0.2","及格0.7","优秀0.9"])

    # 获取边框
    ax = plt.gca()
    # 设置上右边的边框为不显示
    ax.spines['right'].set_color("none")
    ax.spines['top'].set_color("none")

    # 将x y轴与下 左边框绑定
    ax.xaxis.set_ticks_position("bottom")
    ax.yaxis.set_ticks_position("left")

    # 移动 x y 轴 的位置
    ax.spines['bottom'].set_position(('data', 0))
    ax.spines['left'].set_position(('data', 0))

    # 设置 XY 轴的名称
    # plt.xlabel("x轴")
    # plt.ylabel("Y轴")

    plt.plot(x, y, "r-", label="sinX")

    # 以点的形式显示
    # plt.scatter(x, y,label="sinX")

    # 图例legend   label图例的名称
    # y2=np.cos(x)
    # plt.plot(x, y2,"g-",label="cosX")
    # # legend显示图例 legend(handles=,labels=,loc='best')
    plt.legend()

    # 添加注解 annotate  text
    x0=np.pi
    y0=np.sin(x0)
    plt.scatter(x0,y0)
    plt.annotate("$(π,0)$",xy=(x0,y0),xycoords="data",xytext=(+5,+5),textcoords="offset points",fontsize=12)
    plt.text(3,1,"这是sinX",fontsize=15)

    # 对label的样式进行修改 facecolor整体颜色   edgecolor边框颜色   alpha透明度
    for label in ax.get_xticklabels()+ax.get_yticklabels():
        label.set_fontsize(10)
        label.set_bbox(dict(facecolor='black', edgecolor="None", alpha=0.2))

    plt.show()


# 散点图  plt.scatter
def test_scatter():
    n = 102
    x = np.random.rand(n)
    y = np.random.rand(n)
    cValue = ['r', 'y', 'g']
    # cValue=np.random.rand(n)
    plt.scatter(x, y, c=cValue, edgecolors="None", s=70, alpha=0.6)
    plt.show()


# 柱状图  plt.bar
def test_bar():
    n = 10
    x = np.arange(1, n+1)
    y = np.random.rand(n)
    y1 = -y
    ax = plt.gca()
    # 设置上右边的边框为空
    ax.spines['right'].set_color("none")
    ax.spines['top'].set_color("none")

    # bar 柱状图
    plt.bar(x, y, edgecolor="red", alpha=0.6)
    plt.bar(x, y1, facecolor='red', alpha=0.6)
    plt.xticks(x)
    for X, Y in zip(x, y):
        plt.text(X, Y+0.02, "%.2f" % (Y), ha="center", va="bottom")
    for X, Y in zip(x, y1):
        plt.text(X, Y-0.02, "%.2f" % (Y), ha="center", va="top")
    plt.show()





# 等高线实例   plt.contour   contourf
def test_meshgrid():
    def f(x, y):
        return (1-x/2+x**5+y**3)*np.exp(-x**2-y**2)

    n = 400
    x = np.linspace(-3, 3, n)
    y = np.linspace(-3, 3, n)

    # 生成网格点
    X, Y = np.meshgrid(x, y)
    plt.xticks(())
    plt.yticks(())

    # 填充颜色
    plt.contourf(X, Y, f(X, Y), 10, alpha=0.7, cmap=plt.cm.get_cmap("tab10"))

    # 线条
    C = plt.contour(X, Y, f(X, Y), 10, colors="black", linewidths=0.5)

    # 添加标签数字
    plt.clabel(C, inline=True, fontsize=10)

    plt.show()

# imshow  colorbar
def test_img():
    i = np.array([0.313660827978, 0.365348418405, 0.423733120134,
                  0.365348418405, 0.439599930621, 0.525083754405,
                  0.423733120134, 0.525083754405, 0.651536351379]).reshape(3, 3)
    # img操作
    plt.imshow(i, interpolation="none", cmap="hot", origin="upper", aspect=1)

    # 图例 colorbar
    plt.colorbar()

    plt.xticks(())
    plt.yticks(())
    plt.show()

# 3D  plot_surface  ax = Axes3D(fig)
from mpl_toolkits.mplot3d import Axes3D
def test_3d():
    fig = plt.figure()
    ax = Axes3D(fig)
    # XY轴
    X = np.arange(-4, 4, 0.25)
    Y = np.arange(-4, 4, 0.25)
    X, Y = np.meshgrid(X, Y)
    R = np.sqrt(X**2+Y**2)
    # Z轴
    Z = np.sin(R)
    # 画出3d plot_surface
    ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=plt.get_cmap(
        "rainbow"), edgecolor="black", linewidths=0.5)

    ax.contourf(X, Y, Z, zdir="z", offset=-2, cmap="rainbow")

    ax.set_zlim(-2,2)
    plt.show()

# 子图 subplot
def test_subplot():
    plt.figure()
    # 一个figur画四副图
    # plt.subplot(2,2,1)
    # plt.plot([0,2],[0,2])
    # plt.subplot(2,2,2)
    # plt.plot([0,2],[0,2])    
    # plt.subplot(2,2,3)
    # plt.plot([0,2],[0,2])
    # plt.subplot(2,2,4)
    # plt.plot([0,2],[0,2])

    # 第一幅占一整行
    plt.subplot(2,1,1)
    plt.plot([0,2],[0,2])
    # 第二行画两幅
    plt.subplot(2,2,3)
    plt.plot([0,2],[0,2])
    plt.subplot(2,2,4)
    plt.plot([0,2],[0,2])

    plt.show()

def test_subplot2grid():
    plt.figure()
    # shape figure如何进行分割  loc起始位置   colspan rowspan占多少行列 默认为1
    ax1=plt.subplot2grid(shape=(3,3),loc=(0,0),colspan=3,rowspan=1)
    ax1.plot([0,2],[0,2])
    ax1.set_title("ax01")
    ax2=plt.subplot2grid(shape=(3,3),loc=(1,0),colspan=2,rowspan=1)
    ax3=plt.subplot2grid(shape=(3,3),loc=(1,2),colspan=1,rowspan=2)
    ax4=plt.subplot2grid(shape=(3,3),loc=(2,0))
    ax5=plt.subplot2grid(shape=(3,3),loc=(2,1))
    plt.show()


import matplotlib.gridspec as gridspec
def test_gridspec():
    plt.figure()
    gs=gridspec.GridSpec(3,3)
    ax1=plt.subplot(gs[0,:])
    ax2=plt.subplot(gs[1,:2])
    ax3=plt.subplot(gs[1:,2])
    ax4=plt.subplot(gs[2,0])   
    ax5=plt.subplot(gs[2,1])   
    plt.show()

def test_subplots():
    # ax是一个2x2的二维数组
    fg,ax=plt.subplots(2,2,sharex=True,sharey=False)
    for a in ax:
        for a0 in a:
            a0.plot([0,1],[0,1])
    plt.show()


# 图中图 通过定位来确定图的位置
def  test_addaxes():
    fig=plt.figure()
    x=[1,2,3,4,5]
    y=[1,8,5,9,4]

    # 确定所画图的位置
    left,bottom,width,height=0.1,0.1,0.8,0.8
    ax1=fig.add_axes([left,bottom,width,height])
    ax1.plot(x,y,'r')
    ax1.set_title("indside")

    # 方法1
    left,bottom,width,height=0.12,0.7,0.15,0.15 
    ax2=fig.add_axes([left,bottom,width,height])
    ax2.plot(x,y,'b')
    ax2.set_title("indside01")

    # 方法2
    left,bottom,width,height=0.7,0.15,0.15,0.15
    plt.axes([left,bottom,width,height])
    plt.plot(x,y,'y')
    plt.title("indside02")

    plt.show()


# 双y轴  
def test_twins():
    x=np.arange(1,10,0.2)
    y1=x**2
    y2=np.sin(x)

    fig,ax1=plt.subplots()

    # ax2为ax1的X镜像 
    ax2=ax1.twinx()

    ax1.plot(x,y1,"r-")
    ax2.plot(x,y2,"g-")
    ax1.set_xlabel("X轴")
    ax1.set_ylabel("Y",color="r")
    ax2.set_ylabel("Y2",color="g")

    plt.show()

# 动画
from matplotlib import animation
def test_animation():
    fig,ax=plt.subplots()
    x=np.arange(0,np.pi*2,0.2)
    line,=ax.plot(x,np.sin(x))

    # 图像如何变化的方法  i=[1,frames]
    def annimat(i):
        line.set_ydata(np.sin(x+i/30))
        return line,

    # 图像初始的样式
    def init():
        line.set_ydata(np.sin(x))
        return line,

    ani=animation.FuncAnimation(fig,func=annimat,frames=200,init_func=init,interval=10)

    plt.show()


if __name__ == "__main__":

    pass

猜你喜欢

转载自blog.csdn.net/qq_38002337/article/details/80990760