matplotlib画图基本设置

Matplotlib绘图详解
本文详细介绍了使用Matplotlib绘制图表的方法,包括设置图表大小、坐标轴样式、刻度线及标签、网格线、图例等,并提供了丰富的示例代码。

1.matplotlib画出的图中的各个组成部分

这里写图片描述

2.程序与解说

  • 解说

    plt.figure(figsize=(9.6,4.1),facecolor='gray',edgecolor='black')

    设置图片大小9.6x4.1英寸( 1in8.13cm 1 i n ≈ 8.13 c m ),facecolor背景颜色,edgecolor边框线颜色。

    plt.subplot(1,2,1)
    plt.title('(a)')
    plt.xlim((-11,11))
    plt.ylim((-200000,200000))
    plt.xlabel(r'$\alpha$')
    plt.ylabel(r'$\beta$')
    plt.yscale('linear')
    plt.minorticks_on()
    plt.tick_params(which='minor',direction='in',width=2,length=4)
    plt.tick_params(which='major',direction='out',width=4,length=6)
    plt.tick_params(top='off',bottom='on',left='on',right='off')
    plt.tick_params(labeltop='off',labelbottom='on',labelleft='on',labelright='off')
    
    plt.subplot(1,2,2)
    plt.title('(b)')
    plt.xlim((-15,15))
    plt.ylim((-300000,300000))
    plt.xlabel('this is x',fontsize=12)
    plt.ylabel('this is y')

    见下图,xlimylim指定坐标轴的取值范围,title指定图的名称,xlabel,ylabel设置坐标轴名字及其字体大小,支持Latex语法。yscale对坐标轴刻度值的函数,有log等选项。 minorticks_on打开最小刻度线,tick_params(which='minor',direction='in',width=2,length=4)控制主次刻度线的长度,宽度和朝向,(top='off',bottom='on',left='on',right='off')设置主刻度线在上下左右四条边上是否显示,tick_params(labeltop='off',labelbottom='on',labelleft='on',labelright='off')设置刻度值(ticklabel)在上下左右四条边上是否显示。

    这里写图片描述

    plt.xticks([])
    plt.yticks([-200000,-100000,0,100000,200000],
           [r'$big$', r'$zero$',r'small',r'$really small$',r'fine'])

    如下图,xtick([])关闭x轴坐标刻度,yticks([...1],[...2])设置刻度值名称,支持Latex语法。

    这里写图片描述

    plt.axis('off')

    如下图axis('off')关闭坐标轴显示。

    这里写图片描述

       plt.grid(True,color='gray',linestyle='--',linewidth=0.8,alpha=0.9)
       ax=plt.gca()
       ax.xaxis.grid(True,color='r',linestyle='--',linewidth=1.2,alpha=0.3)#alpha is transparencys

    如下图grid打开网格线,ax.xaxis.grid()打开x轴的网格线,并设置格式。alpha是透明度,值越大透明度越,越不透明。

    这里写图片描述

     ax.xaxis.set_ticks_position('top')
     ax.spines['left'].set_linewidth(1.6)
     ax.spines['right'].set_visible(False)
     ax.spines['bottom'].set_visible(False)
     ax.spines['top'].set_linestyle('--')
     ax.spines['top'].set_color('blue')
     ax.spines['left'].set_position(('data',0))
     ax.spines['top'].set_position(('data',0))
    
     xMajorLocator=MultipleLocator(4)
     xMinorLocator=MultipleLocator(1.0)
     yMajorLocator=MultipleLocator(100000)
     yMinorLocator=MultipleLocator(10000)
     ax.xaxis.set_major_locator(xMajorLocator)
     ax.xaxis.set_minor_locator(xMinorLocator)
     ax.yaxis.set_major_locator(yMajorLocator)
     ax.yaxis.set_minor_locator(yMinorLocator)
    for tick in ax.xaxis.get_major_ticks():
        tick.label1.set_fontsize(15)

    如下图,ax.xaxis.set_ticks_position('top')设置x轴的刻度是位于哪一条边上,一般选top或者bottom,ax.spines设置上下左右四条边的颜色、线型、位置等,ax.xaxis.set_major_locator等,设置坐标轴主次刻度值的分辨率。tick.label1.set_fontsize(15)设置刻度值字体大小。

    这里写图片描述

     ax.spines['left'].set_linewidth(2.6) 
     ax.axes.get_yaxis().set_visible(False)

    如下图,ax.axes.get_yaxis().set_visible(False)设置坐标轴是上的刻度不可见,但轴仍在。


    这里写图片描述

    plt.plot(x,y1,color='r',linewidth=0.6,label='oddpower')
    plt.plot(x,y3,color='g',linewidth=1.3,linestyle='--',label='evenpower')
    plt.legend(loc='down left')

    如下图,画图并指定图示说明的位置。


    这里写图片描述

    plt.subplots_adjust(top=0.92, bottom=0.12, left=0.12, right=0.95, hspace=0.25,wspace=0.35)
    plt.savefig('tutorial0.png',dpi=300)

    调整子图之间的相对位置,并保存图片,指定dpidpi越大,图片越清晰。

  • 程序

    
    #!/usr/bin/env python2
    
    
    # -*- coding: utf-8 -*-
    
    """
    Created on Tue May 22 16:49:46 2018
    @author: rd
    """
    from __future__ import division
    import numpy as np
    import matplotlib.pyplot as plts
    from matplotlib.ticker import MultipleLocator
    
    x=np.linspace(-11,11,120)
    y1=x+x**3+x**5
    y2=x**2+x**4+x**6
    y3=x**2+x**6
    
    plt.figure(figsize=(9.6,4.1),facecolor='gray',edgecolor='black')
    plt.subplot(1,2,1)
    plt.xlim((-14,14))
    plt.ylim((-200000,200000))
    plt.xlabel('this is x',fontsize=12)
    plt.ylabel('this is y')
    plt.minorticks_on()
    plt.tick_params(which='minor',direction='in',width=2,length=4)
    plt.tick_params(which='major',direction='out',width=4,length=6)
    plt.tick_params(top='off',bottom='on',left='on',right='off')
    plt.tick_params(labeltop='off',labelbottom='on',labelleft='on',labelright='off')
    
    #plt.xticks([])
    
    
    #plt.yticks([])
    
    
    #plt.xticks([-10,-5,0,5,10],[])
    
    
    #plt.xticks([-9,-6,-3,0,3,6,9],[])
    
    plt.grid(True,color='gray',linestyle='--',linewidth=0.8,alpha=0.8)#open the grid
    plt.yscale('linear')
    plt.plot(x,y1,color='r')
    plt.plot(x,y3,color='g',linewidth=1.3,linestyle='--')
    
    #plt.axis('off')
    
    ax=plt.gca()
    ax.xaxis.grid(color='r',linestyle='--',linewidth=1.2,alpha=0.3)#alpha is transparencys
    ax.xaxis.set_ticks_position('bottom')
    
    #ax.patch.set_facecolor('gray')
    
    for tick in ax.xaxis.get_major_ticks():
        tick.label1.set_fontsize(10)
    ax.spines['left'].set_linewidth(1.6)#line of the axes
    ax.spines['right'].set_visible(False)
    ax.spines['top'].set_linestyle('--')
    ax.spines['top'].set_color('blue')
    ax.spines['bottom'].set_linewidth(1.6)
    
    #ax.spines['left'].set_position(('data',0))#the position of the
    
    
    #ax.spines['bottom'].set_position(('data',0))# axis
    
    xMajorLocator=MultipleLocator(4)
    xMinorLocator=MultipleLocator(1.0)
    yMajorLocator=MultipleLocator(100000)
    yMinorLocator=MultipleLocator(10000)
    ax.xaxis.set_major_locator(xMajorLocator)
    ax.xaxis.set_minor_locator(xMinorLocator)
    ax.yaxis.set_major_locator(yMajorLocator)
    ax.yaxis.set_minor_locator(yMinorLocator)
    plt.yticks([-200000,-100000,0,100000,200000],
               [r'$big$', r'$zero$',r'small',r'$really small$',r'fine'])
    
    #ax.axes.get_yaxis().set_visible(False) #make the yticks is unvisible
    
    
    #ax.axes.get_yaxis().set_visible(False)
    
    plt.legend('upper right')
    
    plt.subplot(1,2,2)
    plt.minorticks_off()
    
    #plt.xticks([])
    
    plt.tick_params(which='both',direction='out')
    plt.plot(x,y2,color='b')
    plt.show()
    plt.subplots_adjust(top=0.92, bottom=0.12, left=0.12, right=0.95, hspace=0.25,
                        wspace=0.35)
    plt.savefig('tutorial0.png',dpi=600)

refer

[1] https://blog.youkuaiyun.com/Fortware/article/details/51934814

[2] http://python.jobbole.com/85106/

[3] https://matplotlib.org/tutorials/introductory/usage.html

### 如何在 Matplotlib 中正确添加和设置 Legend 在 Matplotlib 中,`plt.legend()` 是用于创建图例的主要方法。通过该方法可以指定图例的内容、样式以及位置等属性。 以下是关于如何在 Matplotlib 图表中添加并自定义图例样式的详细说明: #### 添加图例的基本方式 当调用 `plot()` 方法时,可以通过参数 `label` 来为每条曲线分配标签名称。随后,在绘图完成后调用 `plt.legend()` 即可显示这些标签作为图例[^1]。 ```python import matplotlib.pyplot as plt x = [0, 1, 2, 3, 4] y1 = [2, 4, 6, 8, 10] y2 = [1, 2, 3, 4, 5] plt.plot(x, y1, label="线A", color="blue") plt.plot(x, y2, label="线B", linestyle="--", color="red") # 调用 legend 函数展示图例 plt.legend() plt.show() ``` #### 自定义图例的位置 默认情况下,Matplotlib 会自动选择最佳的图例放置位置。然而,也可以手动设定其具体位置。这可通过向 `loc` 参数传递预设字符串或者整数值完成。 例如: - `'best'`: 自动寻找最不干扰图像的地方 (默认选项) - `'upper right'`, `'lower left'`, etc.: 指定角落区域 - 数字编码如 `1`, `2`, ..., `10`: 对应不同方位 下面的例子展示了将图例置于右上角的方法: ```python plt.legend(loc='upper right') ``` #### 修改字体大小及其他外观特性 除了调整位置外,还可以进一步美化图例的文字风格与尺寸。比如改变字体大小(`fontsize`)、边框颜色(`frameon`)等等: ```python plt.legend(title="Legend Title", fontsize=10, frameon=True, facecolor="white", edgecolor="black") ``` 以上代码设置了图例标题、减小了字体大小至10pt,并启用了白色背景加黑色边缘的框架效果。 --- #### 结合中文环境下的应用实例 如果希望支持中文字符,则需先配置合适的字体文件以确保正常渲染汉字[^2]。接着按照前述流程操作即可获得含中文描述的高质量图形输出。 示例程序如下所示: ```python import matplotlib.pyplot as plt # 配置全局字体为支持中文的一种常见开源字体 matplotlib.rc('font', family='WenQuanYi Micro Hei') x = range(5) y1 = [i*2 for i in x] y2 = [(i+1)*2 for i in x] plt.plot(x, y1, 'o-', label=u"系列一") plt.plot(x, y2, '*--', label=u"系列二") # 增加带中文标注的图例 plt.legend(loc='center left', bbox_to_anchor=(1, 0.5), title="图例", fontsize=9) # 展现最终成果 plt.tight_layout(rect=[0, 0, 0.75, 1]) # 调整布局防止溢出 plt.show() ``` 此脚本不仅实现了双线条对比分析功能,而且成功集成了本地化处理后的汉语文本表达形式。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值