matplotlib基础操作(近期学习情况,做一汇总记录)

import matplotlib.pyplot as plt
from matplotlib import pylab
import numpy as np


def f_line():
    # 新建图形;图形窗口最大化;设置标题、网格线、XY轴标签
    fig = plt.figure("折线图", facecolor="lightgray")
    fig.canvas.manager.window.showMaximized()
    plt.title("LINE-折线图", fontsize=18)
    plt.grid(linestyle=":", color="b", alpha=0.5)
    plt.xlabel(r"$X$轴", fontsize=14, loc="right", color="r")
    plt.ylabel(r"$Y$轴", fontsize=14, loc="top", color="r")
    # 设置坐标轴
    ax = plt.gca()
    ax.spines["top"].set_color("none")
    ax.spines["right"].set_color('none')
    ax.spines["left"].set_position(("data", 0))
    ax.spines["bottom"].set_position(("data", 0))
    # 设置刻度定位器、刻度网格线(注:与网格线重合,根据需要选择)
    ax.xaxis.set_major_locator(plt.MultipleLocator(np.pi / 4))
    ax.xaxis.set_minor_locator(plt.MultipleLocator(np.pi / 12))
    ax.yaxis.set_major_locator(plt.MultipleLocator(0.25))
    ax.yaxis.set_minor_locator(plt.MultipleLocator(0.25 / 4))
    ax.grid(which="major", axis="both", linestyle=":", linewidth=0.8, color="r")
    ax.grid(which="minor", axis="both", linestyle=":", linewidth=0.5, color="b")
    # 设置XY轴(刻度+标签)
    plt.xticks(
        [-np.pi * 5 / 4, -np.pi, -np.pi * 3 / 4, -np.pi / 2, -np.pi / 4, 0, np.pi / 4, np.pi / 2, np.pi * 3 / 4, np.pi,
         np.pi * 5 / 4],
        [r"$\frac{5\pi}{4}$", r'$-\pi$', r'$-\frac{3\pi}{4}$', r'$-\frac{\pi}{2}$', r'$-\frac{\pi}{4}$', 0,
         r'$\frac{\pi}{4}$', r'$\frac{\pi}{2}$', r"$\frac{3\pi}{4}$", r'$\pi$', r"$\frac{5\pi}{4}$"], fontsize=14)
    plt.yticks(fontsize=12)
    # 设置XY数据并画图
    x = np.linspace(-4, 4, 3000)
    plt.plot(x, np.sin(x), linestyle="-.", color="orangered", linewidth=2, label="sin(x)")
    plt.plot(x, np.cos(x) / 2, linestyle="--", color="dodgerblue", linewidth=2, label=r"$\frac{cos(x)}{2}$")
    # 设置特殊点,添加注释
    plt.scatter([-np.pi / 2, np.pi / 2], [-1, 1], s=70, marker="o", color="r", zorder=3)
    plt.annotate(text="峰值", color="r", xycoords="data", xy=(np.pi / 2, 1), textcoords="offset points", xytext=(0, -30),
                 fontsize=14, arrowprops=dict(
            arrowstyle="-|>",
            connectionstyle="arc", color="r"
        ))
    plt.annotate("谷值", color="r", xycoords="data", xy=(-np.pi / 2, -1), textcoords="offset points", xytext=(0, 30),
                 fontsize=14, arrowprops=dict(
            arrowstyle="-|>",
            connectionstyle="arc", color="r"
        ))
    # 填充
    plt.fill_between(x, np.sin(x), np.cos(x) / 2, np.sin(x) > np.cos(x) / 2, color="y", alpha=0.3)
    plt.fill_between(x, np.sin(x), np.cos(x) / 2, np.sin(x) < np.cos(x) / 2, color="b", alpha=0.3)


def f_bar():
    fig = plt.figure("柱状图", facecolor="lightgray")
    fig.canvas.manager.window.showMaximized()
    plt.title("BAR-柱状图", fontsize=18)
    x = np.arange(1, 13)
    y1 = np.random.randint(1, 101, 12)
    y2 = np.random.randint(1, 101, 12)
    sum1 = np.sum(y1 + y2)
    print(sum1)
    plt.xlabel("【月 别】", fontsize=18, loc="right")
    plt.ylabel("【销售量】", fontsize=18, loc="top")
    month = [str(m) + "月" for m in np.arange(1, 13)]
    plt.xticks(np.arange(1, 13), month, fontsize=14)
    plt.yticks(fontsize=14)
    # 设置刻度参数(如,字体大小)
    # plt.tick_params(labelsize=50)
    ax = plt.gca()
    ax.yaxis.set_major_locator(plt.MultipleLocator(10))
    ax.yaxis.set_minor_locator(plt.MultipleLocator(5))
    ax.grid(which="major", axis="both", linestyle=":", color="b", alpha=0.8)
    plt.bar(x - 0.2, y1, width=0.4, label="华为手机", bottom=0)
    plt.bar(x + 0.2, y2, width=0.4, label="iPhone")
    # plt.colorbar()
    plt.legend()
    plt.tight_layout()


def f_pie():
    fig = plt.figure("饼状图", facecolor="lightgray")
    fig.canvas.manager.window.showMaximized()
    plt.title("PIE-饼状图", fontsize=18)
    la = ["苹果", "香蕉", "梨", "桔子"]
    xv = [25, 35, 70, 60]
    # xv=[i/np.sum(sum1)*100 for i in sum1]
    ex = [0.01, 0.01, 0.03, 0.02]
    co = ["red", "blue", "yellow", "violet"]
    patches, l_texts, p_text = plt.pie(x=xv, labels=la, colors=co, explode=ex, autopct="%.2f%%", shadow=True,
                                       labeldistance=1.1, pctdistance=0.5, startangle=0)
    # autopct:圆里面的文本格式;
    # shadow:饼是否有阴影;
    # labeldistance:文本的位置离圆心的距离;
    # pctdistance:百分比的text离圆心的距离;
    # startangle,起始角度,0,表示从0开始逆时针转,为第一块。一般选择从90度开始比较好看
    '''改变文本的大小:1.用patches、l_texts(饼图外label的文本)、p_texts(饼图内部文本)接收饼图的返回值;
                    2.遍历每一个text,调用set_size方法设置它的属性。'''
    for t in l_texts:
        t.set_size(15)
    for t in p_text:
        t.set_size(15)
    plt.legend(bbox_to_anchor=(1, 1), fontsize=12, borderaxespad=0.5)
    # plt.legend(bbox_to_anchor=(num1, num2), loc=num3, borderaxespad=num4)
    # bbox_to_anchor(num1,num2)表示legend的位置和图像的位置关系,num1表示水平位置,num2表示垂直位置。
    # num1=0表示legend位于图像的左侧垂直线;num1=1表示legend位于图像的右侧垂直线。
    # num2=0表示legend位于图像下侧水平线;num2=1表示legend位于图像上侧水平线。
    # legend是一个方框,bbox_to_anchor=(num1, num2)相当于表示一个点。参数num3表示legend的哪个位置位于该点。
    # num4表示轴和legend之间的填充,以字体大小距离测量,默认值为None(如果不加该参数,效果是有一定的填充)


def f_contour():
    fig = plt.figure("等高线图", facecolor="lightgray")
    fig.canvas.manager.window.showMaximized()
    plt.title("CONTOUR-等高线图", fontsize=18)
    # np.meshgrid():得到二维数组x、y,直接组成坐标点矩阵
    # z为通过每个坐标的x、y计算而得的高度值(模拟采集的海拔高度)
    x, y = np.meshgrid(np.linspace(-2, 2, 3000), np.linspace(-2, 2, 3000))
    z = (1 - x / 2 + x ** 5 + y * 3) * np.exp(-x ** 2 - y ** 2)
    # z = (1 - x / 2 + x ** 5 + y ** 3) * np.exp(-x ** 2 - y ** 2)
    cntr = plt.contour(x, y, z, 20, colors="k", linewidths=0.5)
    # 设置等高线上的高度标签文本
    plt.clabel(cntr, fmt="%.1f", inline_spacing=0.1, fontsize=12)
    plt.contourf(x, y, z, 20, cmap="jet")
    # 热成像图
    # plt.imshow(z,cmap="jet",origin="lower")
    plt.colorbar()


def f_polar():
    fig = plt.figure("极坐标系", facecolor="lightgray")
    fig.canvas.manager.window.showMaximized()
    plt.title("POLAR-极坐标系", fontsize=18)
    plt.xlabel(r"$\theta$", fontsize=14)
    plt.ylabel(r"$\rho$", fontsize=14)
    plt.tick_params(labelsize=50)
    plt.grid(":")
    plt.subplot(projection="polar")
    t = np.linspace(0, 4 * np.pi, 1000)
    r = t * 0.8
    plt.plot(t,r,"r-.",linewidth=4)


if __name__ == "__main__":
    # 导入中文(两种方法)
    pylab.rcParams["font.family"] = "STSong"
    # plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']

    f_line()
    f_bar()
    f_pie()
    f_contour()
    f_polar()

    plt.show()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值