• matplotlib可视化《2》图形设置与调整


    •figure和subplot

    matplotlib的图像都是位于figure对象中的,我们可以通过plt.figure创建一个新的figure:

    1 fig=plt.figure(figsize=(6,6))#figsize控制画布的大小

    但figure是不能绘图的,我们需要用fig.add_subplot的方式创建一个或者多个subplot才行:

    ax1=fig.add_subplot(211)#表示选中2行1列的第一个画布
    x=np.linspace(0,8,num=50)
    y1=np.sin(x)
    ax1.plot(x,y1)
    1 ax2=fig.add_subplot(212)#第二块画布
    2 x=np.linspace(0,8,num=50)
    3 y2=np.cos(x)
    4 ax2.plot(x,y2)
    5 fig

    plt.subplots

    plt.subplots是更为简单的方法,可以直接创建多个画布,直接调用即可

    1 fig,axes=plt.subplots(2,1,sharex=True,figsize=(7,7))
    1 axes#为数组,所以我们可以用数值索引的方式调用
    array([<matplotlib.axes._subplots.AxesSubplot object at 0x7f97c0ba9350>,
           <matplotlib.axes._subplots.AxesSubplot object at 0x7f97ef1eb090>],
          dtype=object)
    1 axes[0].plot(x,y1)#第一块画布
    2 axes[1].plot(x,y2)#第二块画布
    3 fig

    ~plt.subplots_adjust

    plt.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=None, hspace=None

    参数含义:
    left, right, bottom, top:子图所在区域的边界。
    当值大于1.0的时候子图会超出figure的边界从而显示不全;值不大于1.0的时候,子图会自动分布在一个矩形区域(下图灰色部分)。
    要保证left < right, bottom < top,否则会报错。
    如下图:

    wspace, hspace:子图之间的横向间距、纵向间距分别与子图平均宽度、平均高度的比值。

    举个例子

    1 fig,axes=plt.subplots(2,2,facecolor="darkseagreen",figsize=(6,6))
    2 plt.subplots_adjust(left=0.1, wspace=0.1, top=0.9,hspace=0.2) #位置调整

    •美图

    ~颜色、标记和线型

    1 fig,axes=plt.subplots(2,2,facecolor="darkseagreen",figsize=(6,6))
    2 plt.subplots_adjust(left=0.1, wspace=0.1, top=0.9,hspace=0.2) #位置调整
    3 axes[0,0].plot(np.random.randn(20).cumsum(),"ro--")#“ro--”简单表
    4 axes[0,1].plot(np.random.randn(20).cumsum(),color="g",linestyle="dashed",marker="o")#展开
    5 fig

    颜色和线型参考表如下

    ~标题、刻度、标签和图例

    标题

    1 #整个figure的标题
    2 fig.suptitle('我的画板', fontsize=16, fontweight='bold')
    3 #各个画布的标题
    4 axes[0,0].set_title("画板一")
    5 axes[0,1].set_title("画板二")
    6 axes[1,0].set_title("画板三")
    7 axes[1,1].set_title("画板四")
    8 fig

    刻度、标签

    1 axes[1,0].plot(x,y1)
    2 axes[1,0].set_xticks([0,2,4,6,8])#设置刻度
    3 axes[1,0].set_xticklabels(["第一级","第二级","第三级","第四级","第五级"])#给刻度命名
    4 axes[1,0].set_xlabel("x的值")#标签名
    5 fig

    图例

     1 plt.style.use('ggplot')#设置背景
     2 x=np.linspace(0,8,num=50)
     3 y1=np.sin(x)
     4 y2=np.cos(x)
     5 plt.plot(x,y1,"k-",label="sin函数")
     6 plt.plot(x,y2,"go--",label="cos函数")
     7 plt.title("sin-cos图")
     8 plt.ylabel("y轴")
     9 plt.xlabel("x轴")
    10 plt.legend()#作图时加label,这里才会生成legend

    • 注释

    ~text

    1 tb=test.groupby(["所属区域"]).agg({"数量":np.mean,})#根据实际需求对一表格画柱状图,先分类汇总
    2 tb

    1 fig = plt.figure(figsize=(7, 5),  dpi=90)  # 声明画布1
    2 ax = fig.add_subplot(1,1,1) #  声明绘图区
    3 x, y = tb.index, list(tb["数量"])
    4 plt.bar(x, y, color='dodgerblue', width=0.35, label='label1')
    5 plt.grid(linestyle="-.", axis='y', alpha=0.4)#设置横向网格
    6 plt.tight_layout()
    7 for a,b in zip(x,y):
    8     plt.text(a, b,'%.3f'%b, ha = 'center',va = 'bottom',fontsize=10)

     注:plt.text在对应位置添文字说明来生成相应的数字标签,a、b表示文字显示在坐标轴的位置,'%.3f' % b,代表标注的文字,即每个柱子对应的y值, ha='center', va= 'bottom'代表horizontalalignment(水平对齐)、verticalalignment(垂直对齐)的方式,fontsize则是文字大小。

    折线图

    tt=test.groupby(test["订购日期"]).agg({"数量":np.sum})
    x,y=tt.index,tt["数量"]
    plt.plot(x,y,"go--")
    for a,b in zip(x,y):
        plt.text(a,b,"%.3f"%b,ha="center",va="bottom")

    ~annotate

    参数说明:

    Axes.annotate(s, xy, *args, **kwargs)

    • s:注释文本的内容
    • xy:被注释的坐标点,二维元组形如(x,y)
    • xytext:注释文本的坐标点,也是二维元组,默认与xy相同
    • arrowprops箭头的样式,dict(字典)型数据,如果该属性非空,则会在注释文本和被注释点之间画一个箭头。可设置arrowstyle' 关键字

     1 fig, ax = plt.subplots()
     2  
     3 # 绘制一个余弦曲线
     4 t = np.arange(0.0, 4.0, 0.01)
     5 s = np.cos(2*np.pi*t)
     6 line, = ax.plot(t, s, lw=2)
     7  
     8 # 绘制一个绿色简单的箭头
     9 ax.annotate('local max', xy=(2, 1), xytext=(3, 1.5),
    10             xycoords='data',
    11             arrowprops=dict(arrowstyle='simple',facecolor='green')
    12             )
    13 ax.set_ylim(-2, 2)

  • 相关阅读:
    海泉湾
    ns2的wirelessphy中添加定时器
    ns2能量模型添加充电模型
    用gawk和gnuplot来分析ns2的trace文件
    [转载]ns2中的能量模型
    配置本地SVN[转载]
    EMQ插件通过HTTP连接认证服务器实现认证
    在K8S上跑一个helloworld
    EMQ插件组合实现物联网边缘平台的设备通信管理
    在CentOS7上搭建Kubernetes
  • 原文地址:https://www.cnblogs.com/ye20190812/p/13477248.html
Copyright © 2020-2023  润新知