matplotlib 学习

作者: 卅清 | 来源:发表于2020-02-13 20:19 被阅读0次

    matplotlib是PYTHON绘图的基础库,是模仿matlab绘图工具开发的一个开源库。 PYTHON其它第三方绘图库都依赖与matplotlib

    折线图 plot chart

    特点:能够显示数据的变化趋势,反映事物的变化情况。(变化)

    # 导入matplotlib.pyplot 模块

    import matplotlib.pyplot as plt

    import random

    plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签/如果想默认为SimHei,可直接在配置文件中修改

    plt.rcParams['axes.unicode_minus']=False #用来正常显示负号

    %matplotlib inline

    # 数据准备

    x = range(60)

    y_shanghai = [random.uniform(15, 18) for i in x]

    # 增加北京的温度数据

    y_beijing = [random.uniform(1, 3) for i in x]

    # 创建画布(容器层) figsize:指定图的长宽,dpi:图像的清晰度

    plt.figure(figsize=(15,4),dpi=80)

    # 绘制折线图(图像层)

    plt.plot(x, y_shanghai, label="北京")

    # 使用多次plot可以画多个折线

    plt.plot(x, y_beijing, color='r', linestyle='-.', label="北京")

    # 构造x轴刻度标签

    x_ticks_label = ["11点{}分".format(i) for i in x]

    # 显示图例

    plt.legend(loc=0)

    # 构造y轴刻度

    y_ticks = range(40)

    # 修改x,y轴坐标的刻度显示

    plt.xticks(x[::5], x_ticks_label[::5])

    plt.yticks(y_ticks[::5])

    # 添加网格显示

    plt.grid(True, linestyle='--', alpha=0.5)

    # 添加x轴、y轴描述信息及标题

    plt.xlabel("时间")

    plt.ylabel("温度")

    plt.title("中午11点0分到12点之间的温度变化图示")

    # 保存图片到指定路径

    plt.savefig("test.png")

    # 注意:plt.show()会释放figure资源,所以要在plt.show()前面。

    # 显示图像

    # plt.show()

    # 多个坐标系显示-plt.subplots(面向对象的画图方法)

    #  matplotlib.pyplot.subplots(nrows=1, ncols=1, **fig_kw) 创建一个带有多个axes(坐标系/绘图区)的

    # 折线图的排列方式

    fig,axes = plt.subplots(nrows=1,ncols=2, figsize=(20, 5), dpi=80)

    # 2)绘制折线图

    axes[0].plot(x, y_shanghai, label="上海")

    axes[1].plot(x, y_beijing, color='r', linestyle='--', label="北京")

    axes[0].legend()

    axes[1].legend()

    # 使用subplot

    plt.figure(figsize=(20, 8))

    plt.subplot(1,2,1)

    plt.plot(x, y_shanghai, label="上海")

    plt.subplot(1,2,2)

    plt.plot(x, y_beijing, color='r', linestyle='--', label="北京")

    柱状图 bar chart

    绘制连离散的数据,能够一眼看出各个数据的大小,比较数据之间的差别。(统计/对比)

    verticle 图垂直

    data = [5,25,50,20]

    plt.bar(range(len(data)),data)

    horizontal 图水平

    data = [5,25,50,20]

    plt.barh(range(len(data)),data)

    多个bar

    import numpy as np

    data = [[5,25,50,20],

            [4,23,51,17],

            [6,22,52,19]]

    X = np.arange(4)

    plt.bar(X + 0.00, data[0],color='b',width=0.25,label="A")

    plt.bar(X + 0.20, data[0],color='y',width=0.25,label="B")

    plt.bar(X + 0.50, data[0],color='r',width=0.25,label="C")

    plt.legend(loc='best')

    stacked 多个图叠加

    data = [[5,25,50,20],

            [4,23,51,17],

            [6,22,52,19]]

    X = np.arange(4)

    plt.bar(X+0.25, data[0], color = 'b', width = 0.25)

    plt.bar(X, data[1], color = 'y', width = 0.25,bottom=data[0])

    plt.bar(X, data[0], color = 'r', width = 0.25,bottom=np.array(data[0])+np.array(data[1]))

    scatter points 散点图

    散点图用来衡量两个连续变量之间的相关性

    N = 50

    x = np.random.rand(N)

    y = np.random.rand(N)

    colors = np.random.randn(N)

    #  调整大小

    area = np.pi*(15*np.random.rand(N)**2)

    plt.scatter(x, y,c=colors,s=area)

    histogram 直方图

    直方图是用来衡量连续变量的概率分布的。在构建直方图之前,我们需要先定义好bin(值的范围),也就是说我们需要先把连续值划分成不同等份,然后计算每一份里面数据的数量

    a = np.random.rand(100)

    plt.hist(a,bins=20)

    plt.ylim(0,14)

    a = np.random.randn(10000)

    plt.hist(a,bins=50)

    plt.title("标准正态分布")

    boxplots 箱型图

    用于表达连续特征的百分位数分布。统计学上经常被用于检测单变量的异常值,或者用于检查离散特征和连续特征的关系

    x = np.random.randint(20,100,size=(30,3))

    plt.boxplot(x)

    plt.ylim(0,120)

    plt.xticks([1,2,3],['A','B','C'])

    # 横线 横线开始横坐标,横线结束横坐标 ,vlines是竖线

    plt.hlines(y = np.mean(x,axis = 0)[1],xmin=0,xmax=3)

    颜色调整与添加文字 color /text

    # 画布颜色

    fig,axs = plt.subplots(facecolor='darkseagreen')

    data = [[5,25,50,20],

            [4,23,51,17],

            [6,22,52,19]]

    X = np.arange(4)

    # 图形颜色

    plt.bar(X,data[0],color='darkorange',width=0.25,label="A")

    plt.bar(X+0.25,data[1],color='blue',width=0.25,label="B")

    plt.bar(X+0.5,data[2],color='violet',width=0.25,label="C")

    axs.set_title('Figur 1')

    axs.legend()

    #添加文字

    plt.text(1.0,30,"lalal")

    W = [0.00,0.25,0.50]

    for i in range(3):

    #    zip() 函数用于将可迭代对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象。

        for a,b in zip(X+W[i],data[i]):

            plt.text(a,b,"%.0f"% b,ha="center",va="bottom")

    plt.xlabel("Group")

    plt.ylabel("Num")

    注释

    在数据可视化的过程中,图片中的文字经常被用来注释图中的一些特征。使用annotate()方法可以很方便地添加此类注释。在使用annotate时,要考虑两个点的坐标:被注释的地方xy(x, y)和插入文本的地方xytext(x, y)

    X = np.linspace(0, 2*np.pi,100)# 均匀的划分数据

    Y = np.sin(X)

    Y1 = np.cos(X)

    plt.plot(X,Y)

    plt.plot(X,Y1)

    plt.annotate("Y",

                xy=(1, np.sin(1)),

                xytext=(2,0.5),fontsize=14,

                arrowprops=dict(arrowstyle="->"))

    plt.title("这是一副测试图")

    subplots 用法

    plt.rcParams['figure.figsize'] = (10, 6) # 调整图片大小

    np.random.seed(19680801) #随机数种子,设置后让每次生成的随机数一致

    n_bins = 10

    x = np.random.randn(1000, 3)

    fig,axes = plt.subplots(2,2,facecolor="darkorange")

    ax0, ax1, ax2, ax3 = axes.flatten() #将拆分的区域进行分发

    colors = ['red', 'tan', 'lime']

    ax0.hist(x, n_bins, normed=1, histtype='bar', color=colors, label=colors)

    ax0.legend(prop={'size': 10})

    ax0.set_title('bars with legend')

    ax1.hist(x, n_bins, normed=1, histtype='bar', stacked=True)

    ax1.set_title('stacked bar')

    ax2.hist(x, n_bins, histtype='step', stacked=True, fill=False)

    ax2.set_title('stack step (unfilled)')

    # x_multi = [np.random.randn(n) for n in [10000, 5000, 2000]]

    # ax3.hist(x_multi, n_bins, histtype='bar')

    # ax3.set_title('different sample sizes')

    fig.tight_layout() # Adjust subplot parameters to give specified padding.自动调整一个合适的大小

    ShareX or ShareY 共享xy轴

    N_points = 100000

    n_bins = 20

    x = np.random.randn(N_points)

    y = .4 * x + np.random.randn(100000) + 5

    fig, axs = plt.subplots(1, 2, sharey=True, tight_layout=True)

    axs[0].hist(x,bins=n_bins)

    axs[1].hist(y,bins=n_bins)

    pandas api 使用pandas调用matplotlib

    import pandas as pd

    df = pd.read_csv("stock_day.csv",sep=',')

    df.head()

    # 散点图

    df.plot.scatter(x="open",y="close",c="volume")

    # 直方图

    df[["open","close"]].plot.hist()

    # 箱型图

    df = pd.DataFrame(np.random.rand(10, 5), columns=['A', 'B', 'C', 'D', 'E'])

    df.plot.box()

    相关文章

      网友评论

        本文标题:matplotlib 学习

        本文链接:https://www.haomeiwen.com/subject/fbrcfhtx.html