精华内容
下载资源
问答
  • Matplotlib

    万次阅读 多人点赞 2018-08-23 23:28:21
    matplotlib.pyplot 是一个命令风格的函数集合,这使得 matplotlib 工作起来和MATLAB很相似。每一个 pyplot 函数都会使图形发生一些变化,例如:创建一幅图形、在一幅图中创建一个绘图区域、在绘图区域中绘制一些线.....

    官网帮助文档地址:https://matplotlib.org/tutorials/introductory/pyplot.html 

    Pyplot简介

    matplotlib.pyplot 是一个命令风格的函数集合,这使得 matplotlib 工作起来和MATLAB很相似。每一个 pyplot 函数都会使图形发生一些变化,例如:创建一幅图形、在一幅图中创建一个绘图区域、在绘图区域中绘制一些线、使用标签对图形进行修饰,等等。在matplotlib.pyplot中,各种各样的状态通过调用不同的函数被保存下来,因此,matplotlib 能够持续地对例如:当前的图形和绘图区域、并将绘图函数作用到当前轴上(请注意,这里和文档中大多数地方的“轴”指的是图形的坐标系部分,而不是严格数学术语中的多个轴)。
               使用 pyplot 生成一个可视化效果非常快:

    import matplotlib.pyplot as plt
    plt.plot([1,2,3,4])
    plt.ylabel('some numbers')
    plt.show()

    你可能会觉得很奇怪:为什么X轴取值的范围是 0~3,而Y轴取值的范围是1~4 ?

    这是因为:如果你只提供 了一个列表或者数组作为 plot() 命令的参数,Matplotlib 就会把这个序列当作是Y轴上的取值,并自动地为你生成 X轴上的值。由于在python中范围是从0开始的,因此在默认情况下,X轴向量会与Y轴向量的长度相同但其取值会从0开始,正如我们所看到的X轴的数据是[0,1,2,3]。
               plot() 是一个多功能的命令,能够接收任意数量的参数,例如:你可以使用如下命令来绘制与X相对的Y的图形。

    plt.plot([1, 2, 3, 4], [1, 4, 9, 16])

    格式化图形样式

    plot() 还为每一对参数X和Y提供了一个可选的第三个格式化字符串参数用来指定图形的颜色和线型。该格式化字符串的字母和符号均来自于MATLAB,由一个代表颜色的字符串和一个代表线型的字符串组合而成。默认使用的格式化字符串是’b-‘(表示蓝色实线)。 
               如果想要使用红色的圆点来绘制上例中的图形,你可以这么写:

    plt.plot([1, 2, 3, 4], [1, 4, 9, 16], 'ro')
    plt.axis([0, 6, 0, 20])
    plt.show()

     你可以查看 plot() 的文档来获取关于线的样式和格式化字符串的完整列表。
                上例中的 axis() 命令接收了 [xmin, xmax, ymin, ymax] 列表作为参数来指定了各个轴的视口大小。但如果 Matplotlib 被限制成只能和 list 一起使用 ,那么它在数值处理上将显得几乎毫无用处 。通常,我们都会使用 numpy 数组,事实上,所有的序列都会在 Matplotlib 内部被转化成 numpy 数组。下面的例子展示了如何在一条命令里使用  numpy 数组绘制出几条样式不同的线:

    import numpy as np
    
    # evenly sampled time at 200ms intervals
    t = np.arange(0., 5., 0.2)
    
    # red dashes, blue squares and green triangles
    plt.plot(t, t, 'r--', t, t**2, 'bs', t, t**3, 'g^')
    plt.show()

     

     补充:plot()  中,格式化字符串由颜色、标识符和线型三部分组成,定义格式如下:

    fmt = '[color][marker][line]'

    其中,支持的颜色缩写有如下几个:

    charactercolor
    'b'blue
    'g'green
    'r'red
    'c'cyan
    'm'magenta
    'y'yellow
    'k'black
    'w'white

    标识符定义如下表所示:

    characterdescription
    '.'point marker
    ','pixel marker
    'o'circle marker
    'v'triangle_down marker
    '^'triangle_up marker
    '<'triangle_left marker
    '>'triangle_right marker
    '1'tri_down marker
    '2'tri_up marker
    '3'tri_left marker
    '4'tri_right marker
    's'square marker
    'p'pentagon marker
    '*'star marker
    'h'hexagon1 marker
    'H'hexagon2 marker
    '+'plus marker
    'x'x marker
    'D'diamond marker
    'd'thin_diamond marker
    '|'vline marker
    '_'hline marker

    可以选用的线型有以下四个:

    characterdescription
    '-'solid line style
    '--'dashed line style
    '-.'dash-dot line style
    ':'dotted line style

     以下是几个格式化字符串的示例:

    'b'    # blue markers with default shape
    'ro'   # red circles
    'g-'   # green solid line
    '--'   # dashed line with default color
    'k^:'  # black triangle_up markers connected by a dotted line

    使用关键字绘图

    Matplotlib 允许用户提供带有关键字的数据对象作为参数,一旦提供了带有关键字的数据,就能够直接使用关键字来代替这些变量去生成图形。
               我们可以使用某些命令来获取到这种格式的数据,例如:numpy.recarraypandas.DataFrame  。

    data = {'a': np.arange(50),
            'c': np.random.randint(0, 50, 50),
            'd': np.random.randn(50)}
    data['b'] = data['a'] + 10 * np.random.randn(50)
    data['d'] = np.abs(data['d']) * 100
    
    plt.scatter('a', 'b', c='c', s='d', data=data)
    plt.xlabel('entry a')
    plt.ylabel('entry b')
    plt.show()

    使用分类变量绘图

    使用分类变量来创建图形也是可以的,Matplotlib 允许用户直接把分类变量传递给多个绘图函数,例如:

    names = ['group_a', 'group_b', 'group_c']
    values = [1, 10, 100]
    
    plt.figure(1, figsize=(9, 3))
    
    plt.subplot(131)
    plt.bar(names, values)
    plt.subplot(132)
    plt.scatter(names, values)
    plt.subplot(133)
    plt.plot(names, values)
    plt.suptitle('Categorical Plotting')
    plt.show()

     控制线的属性 

    线的属性有很多,详情参见  matplotlib.lines.Line2D ,例如你可以设置:线宽、虚线和抗锯齿效果,等等。
               我们可以通过以下几种途径对线的属性进行设置:
               使用关键字参数

    plt.plot(x, y, linewidth=2.0)

    使用2D 线实例的set方法
               plot() 命令会返回一个线对象的列表,例如:line1, line2 = plot(x1, y1, x2, y2)。在下面的代码中,我们将假设我们只有一条线即plot() 命令返回的线列表的长度为 1 。我们使用 line, 来获取列表中的第一个元素。

    line, = plt.plot(x, y, '-')
    line.set_antialiased(False) # turn off antialising

               使用setp()命令
               下面示例一下如何使用MATLAB风格的命令对一个线列表的多个属性进行设置。很明显地,setp() 能够作用于一个对象列表或者是一个单独的对象。你既可以使用Python 的关键字作为参数也可以使用MATLAB风格的string/value 对作为参数:

    lines = plt.plot(x1, y1, x2, y2)
    # use keyword args
    plt.setp(lines, color='r', linewidth=2.0)
    # or MATLAB style string value pairs
    plt.setp(lines, 'color', 'r', 'linewidth', 2.0)

    2D 线实例的可用属性见下表:

    PropertyValue Type
    alphafloat
    animated[True | False]
    antialiased or aa[True | False]
    clip_boxa matplotlib.transform.Bbox instance
    clip_on[True | False]
    clip_patha Path instance and a Transform instance, a Patch
    color or cany matplotlib color
    containsthe hit testing function
    dash_capstyle['butt' | 'round' | 'projecting']
    dash_joinstyle['miter' | 'round' | 'bevel']
    dashessequence of on/off ink in points
    data(np.array xdata, np.array ydata)
    figurea matplotlib.figure.Figure instance
    labelany string
    linestyle or ls[ '-' | '--' | '-.' | ':' | 'steps' | ...]
    linewidth or lwfloat value in points
    lod[True | False]
    marker[ '+' | ',' | '.' | '1' | '2' | '3' | '4' ]
    markeredgecolor or mecany matplotlib color
    markeredgewidth or mewfloat value in points
    markerfacecolor or mfcany matplotlib color
    markersize or msfloat
    markevery[ None | integer | (startind, stride) ]
    pickerused in interactive line selection
    pickradiusthe line pick selection radius
    solid_capstyle['butt' | 'round' | 'projecting']
    solid_joinstyle['miter' | 'round' | 'bevel']
    transforma matplotlib.transforms.Transform instance
    visible[True | False]
    xdatanp.array
    ydatanp.array
    zorderany number

     如果你想要获取可供设置的线属性的列表,你可以直接调用 setp() 命令并传入一条线或者传入一个线列表作为唯一参数。

    lines = plt.plot([1, 2, 3])
    
    plt.setp(lines)
      alpha: float
      animated: [True | False]
      antialiased or aa: [True | False]
      ...snip

     使用多图形和多轴

    MATLAB和 pyplot 都有当前图形和当前轴的概念,所有的绘图命令都会被应用到当前轴上。在 Matplotlib 中,gca() 命令用来获取当前轴(一个 matplotlib.axes.Axes 实例),gcf() 命令用来获取当前图形(一个 matplotlib.figure.Figure 实例)。通常情况下,你并不需要考虑这些,因为 Matplotlib 会在后台对它们进行自动处理。
               下面是一个创建了两个子图形的示例脚本:

    def f(t):
        return np.exp(-t) * np.cos(2*np.pi*t)
    
    t1 = np.arange(0.0, 5.0, 0.1)
    t2 = np.arange(0.0, 5.0, 0.02)
    
    plt.figure(1)
    plt.subplot(211)
    plt.plot(t1, f(t1), 'bo', t2, f(t2), 'k')
    
    plt.subplot(212)
    plt.plot(t2, np.cos(2*np.pi*t2), 'r--')
    plt.show()

    figure()命令在这儿是一个可选项,因为默认创建的就是 figure(1) ,同样地,在没有手动地指定任何轴的情况下,将默认创建 subplot(111) 。subplot() 命令需要指定行数、列数、图形编号,其中图形编号的取值范围为(1 ~ 行数*列数)。如果行数*列数<10,参数之间的逗号可以省略。因此,subplot(211) 和 subplot(2, 1, 1) 的作用是一样的。

    你可以创建任意数量的子图形或者坐标系。如果你想要手动去放置一个坐标系可以使用 axes() 命令,并通过  axes([left, bottom, width, height]) 的四个参数( 0 ~ 1 的小数)来指定坐标系的位置和大小。

               手动设置坐标系示例:https://matplotlib.org/gallery/subplots_axes_and_figures/axes_demo.html
               绘制多个子图形示例:
               https://matplotlib.org/gallery/subplots_axes_and_figures/subplot_demo.html
               https://matplotlib.org/gallery/subplots_axes_and_figures/subplots_demo.html
               你可以通过多次调用figure() 方法并传入一个递增的图形编号来创建多个图形。当然,只要你喜欢每一个图形也可以包含多个子图形或者坐标系:

    import matplotlib.pyplot as plt
    plt.figure(1)                # the first figure
    plt.subplot(211)             # the first subplot in the first figure
    plt.plot([1, 2, 3])
    plt.subplot(212)             # the second subplot in the first figure
    plt.plot([4, 5, 6])
    
    
    plt.figure(2)                # a second figure
    plt.plot([4, 5, 6])          # creates a subplot(111) by default
    
    plt.figure(1)                # figure 1 current; subplot(212) still current
    plt.subplot(211)             # make subplot(211) in figure1 current
    plt.title('Easy as 1, 2, 3') # subplot 211 title
    plt.show()

     

     你可以使用 clf() 命令来清除当前图形或者使用 cla() 命令来清除当前坐标系。 如果你觉得由后台帮你维护图形状态(指当前的图像,图形和坐标系)这种方式比较烦人,无须绝望:这只是对面向对象API的一个瘦状态封装,你可以把它替换掉(参见 Artist tutorial )。
                如果你是在创建多个图形,你还需要注意另外一件事:图形所占用的内存直到你调用 close() 显式地将其关闭才会全部释放,如果只删除掉图形的引用或者通过窗口管理器销毁掉屏幕上的图像展示窗口,图形所占用的内存是不能完全被释放的,因为pyplot 在 close() 命令被调用之前仍会对其内部引用进行维护。

     使用文本

    使用 text() 命令可以在图形的任意位置添加文本,xlabel()、ylabel()、title() 用来在指定位置添加文本(更多详细案例参见 Text in Matplotlib Plots )。

    mu, sigma = 100, 15
    x = mu + sigma * np.random.randn(10000)
    
    # the histogram of the data
    n, bins, patches = plt.hist(x, 50, density=1, facecolor='g', alpha=0.75)
    
    
    plt.xlabel('Smarts')
    plt.ylabel('Probability')
    plt.title('Histogram of IQ')
    plt.text(60, .025, r'$\mu=100,\ \sigma=15$')
    plt.axis([40, 160, 0, 0.03])
    plt.grid(True)
    plt.show()

     

    所有的文本命令都会返回一个  matplotlib.text.Text  实例,跟前面线的属性设置一样,你可以往文本命令中传入关键字参数或者使用 setp() 命令来自定义文本的属性。

    t = plt.xlabel('my data', fontsize=14, color='red')

                关于文本的属性的更多细节请参见:https://matplotlib.org/tutorials/text/text_props.html

     在文本中使用数学表达式 

    Matplotlib 接收的文本表达式中可以包含 TeX 方程表达式,比如,书写时,需要使用 "$" 符号把TeX表达式包起来:

    plt.title(r'$\sigma_i=15$')

    标题字符串前面的”r”字符非常重要:它表示这个字符串是一个原生字符串,不用把里面的反斜杠当作 Python 的转义字符来看待。
               Matplotlib 有一个內建的 TeX 方程式的语法分析器和布局引擎,并带有自己的数学字体(详情参见  Writing mathematical expressions )。因此你可以不用安装TeX就能够跨平台使用数学表达式,对于那些已经安装了LaTeX和dvipng的用户,你也可以使用LaTex 来格式化你的文字并将输出的文本并入到你要展示的图形或者要保存的脚本中(详情参见 Text rendering With LaTeX)。

     注释文本 

    上面讲到过 text()命令的基本作用是在坐标系的任意位置添加一个文本,而文本通常是用来对图形的某些特征进行注释,annotate() 方法提供了一些非常有用的功能使得注释变得更加容易。对于注释有两个需要考虑的点:使用 xy 参数来代表需要被注释的位置;使用 xytext 参数来指定注释文本的放置位置;这两个参数的取值均为(x,y) 的组合。

    ax = plt.subplot(111)
    
    t = np.arange(0.0, 5.0, 0.01)
    s = np.cos(2*np.pi*t)
    line, = plt.plot(t, s, lw=2)
    
    plt.annotate('local max', xy=(2, 1), xytext=(3, 1.5),
                 arrowprops=dict(facecolor='black', shrink=0.05),
                 )
    
    plt.ylim(-2, 2)
    plt.show()

     

    在这个基础示例中,xy (箭头提示) 和 xytext(文本位置)都是在数据的坐标系中,这里还有许多其他种类的坐标系可以选择(详情参见  Basic annotationAdvanced Annotation),更多示例参见: Annotating Plots

     对数及其他非线性坐标系

    matplotlib.pylot 除了支持线性坐标系外,也支持对数和分对数等非线性坐标系,当数据的量级跨度比较大时会经常用到这些坐标系,改变一个坐标轴的刻度非常容易:

    plt.xscale('log')

    下例中展示了对于同样的数据,当Y轴使用不同刻度时的四个图形:

    from matplotlib.ticker import NullFormatter  # useful for `logit` scale
    
    # Fixing random state for reproducibility
    np.random.seed(19680801)
    
    # make up some data in the interval ]0, 1[
    y = np.random.normal(loc=0.5, scale=0.4, size=1000)
    y = y[(y > 0) & (y < 1)]
    y.sort()
    x = np.arange(len(y))
    
    # plot with various axes scales
    plt.figure(1)
    
    # linear
    plt.subplot(221)
    plt.plot(x, y)
    plt.yscale('linear')
    plt.title('linear')
    plt.grid(True)
    
    
    # log
    plt.subplot(222)
    plt.plot(x, y)
    plt.yscale('log')
    plt.title('log')
    plt.grid(True)
    
    
    # symmetric log
    plt.subplot(223)
    plt.plot(x, y - y.mean())
    plt.yscale('symlog', linthreshy=0.01)
    plt.title('symlog')
    plt.grid(True)
    
    # logit
    plt.subplot(224)
    plt.plot(x, y)
    plt.yscale('logit')
    plt.title('logit')
    plt.grid(True)
    # Format the minor tick labels of the y-axis into empty strings with
    # `NullFormatter`, to avoid cumbering the axis with too many labels.
    plt.gca().yaxis.set_minor_formatter(NullFormatter())
    # Adjust the subplot layout, because the logit one may take more space
    # than usual, due to y-tick labels like "1 - 10^{-3}"
    plt.subplots_adjust(top=0.92, bottom=0.08, left=0.10, right=0.95, hspace=0.25,
                        wspace=0.35)
    
    plt.show()

    你也可以添加你自定义的刻度,详情参见:Developer's guide for creating scales and transformations

    展开全文
  • matplotlib python-2D绘图使用的套件。 pylab是matplotlib面向对象绘图的一个接口,语法和matlab相近。 from pylab import * import numpy as np x = np.linspace(-np.pi,np.pi,256,endpoint=True) C,S = np.cos(x)...

    matplotlib

    python-2D绘图使用的套件。

    pylab是matplotlib面向对象绘图的一个接口,语法和matlab相近。

    from pylab import *
    import numpy as np
    
    x = np.linspace(-np.pi,np.pi,256,endpoint=True)
    C,S = np.cos(x),np.sin(x)
    

    默认配置由用户自定义:图片大小、分辨率、线宽、颜色、风格、坐标轴、坐标轴和网格属性等。

    import numpy as np
    import matplotlib.pyplot as plt
    
    plt.plot(x,C)
    plt.plot(x,S)
    
    plt.show()
    

    在这里插入图片描述

    #导入matplotlib所有内容
    from pylab import *
    
    #创建一个8*6点的图,设置分辨率为80
    figure(figsize=(8,6),dpi=80)
    
    #创建一个新的1*1子图,下面的图样绘制在其中的第一块
    subplot(1,1,1)
    
    x = np.linspace(-np.pi,np.pi,256,endpoint=True)
    C,S = np.cos(x),np.sin(x)
    
    #绘制余弦曲线,使用蓝色、连续、宽度为1(像素)的线条。
    plot(x,C,color="blue",linewidth=1.0,linestyle="-")
    
    #绘制正弦曲线,使用绿色、连续、宽度1(像素)的线条
    plot(x,S,color="green",linewidth=1.0,linestyle="-")
    
    #设置横轴上下限
    xlim(-4.0,4.0)
    
    #设置横轴记号
    xticks(np.linspace(-4,4,9,endpoint=True))
    
    #设置纵轴上下限
    ylim(-1.0,1.0)
    
    #设置纵轴记号
    yticks(np.linspace(-1,1,5,endpoint=True))
    
    #以分辨率72来保存图片
    # savefig("exercice_2.png",dpi=72)
    
    #在屏幕上显示
    show()
    

    在这里插入图片描述

    2. 改变线条的颜色和粗细

    #水平方向加长
    figure(figsize=(10,6),dpi=80)
    
    #线条加粗
    plot(x,C,color="blue",linewidth=2.5,linestyle="-")
    plot(x,S,color="red",linewidth=2.5,linestyle="-")
    
    [<matplotlib.lines.Line2D at 0x21597023080>]
    

    在这里插入图片描述

    3. 设置图片边界

    plt.plot(x, C, color="blue", linewidth=2.5, linestyle="-")
    plt.plot(x, S, color="red", linewidth=2.5, linestyle="-")
    
    
    Xmin ,Xmax = x.min(), x.max()
    ymin, ymax = C.min(), C.max()
    
    dx = (Xmax - Xmin) * 0.2
    dy = (ymax - ymin) * 0.2
    
    xlim(Xmin - dx, Xmax + dx)   
    # 扩展x,y轴的坐标范围
    ylim(ymin - dy, ymax + dy)
    
    (-1.399984822022966, 1.3999089321377967)
    

    在这里插入图片描述

    4. 设置记号

    plt.plot(x, C, color="blue", linewidth=2.5, linestyle="-")
    plt.plot(x, S, color="red", linewidth=2.5, linestyle="-")
    
    xticks([-np.pi,-np.pi/2,0,np.pi/2,np.pi]) #对特定位置的值进行标记。
    yticks([-1,0,+1])
    
    ([<matplotlib.axis.YTick at 0x21595db7898>,
      <matplotlib.axis.YTick at 0x21595db7d68>,
      <matplotlib.axis.YTick at 0x215970c13c8>],
     [Text(0, 0, ''), Text(0, 0, ''), Text(0, 0, '')])
    

    在这里插入图片描述

    5. 设置记号标签

    plt.plot(x, C, color="blue", linewidth=2.5, linestyle="-")
    plt.plot(x, S, color="red", linewidth=2.5, linestyle="-")
    
    #设置成特征的标签
    xticks([-np.pi,-np.pi/2,0,np.pi/2,np.pi],
           [r'$-\pi$',r'$-\pi/2$',r'$0$',r'$+\pi/2$',r'$+\pi$'])
    yticks([-1,0,1],
           [r'$-1$',r'$0$',r'$+1$'])
    
    ([<matplotlib.axis.YTick at 0x2159720a630>,
      <matplotlib.axis.YTick at 0x2159720a0b8>,
      <matplotlib.axis.YTick at 0x215970abf60>],
     [Text(0, -1, '$-1$'), Text(0, 0, '$0$'), Text(0, 1, '$+1$')])
    

    在这里插入图片描述

    6. 移动脊柱

    坐标轴和上面的记号连在一起形成了脊柱,记录数据区域的范围,可以放在任意位置。
    每幅图有四个脊柱,为了将脊柱放在图的中间,必须将其中的两条设置为无色。
    再调整剩下的两条到合适的位置-数据空间的0点。

    x = np.linspace(-np.pi, np.pi, 256,endpoint=True)
    C,S = np.cos(x), np.sin(x)
    plt.plot(x, C, color="blue", linewidth=2.5, linestyle="-")
    plt.plot(x, S, color="red", linewidth=2.5, linestyle="-")
    
    plt.xlim(x.min()*1.1, x.max()*1.1)
    # 设置x轴的格式,真实数值和显示数值结合。显示数值使用latex格式。
    plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi],
           [r'$-\pi$', r'$-\pi/2$', r'$0$', r'$+\pi/2$', r'$+\pi$'])
    
    plt.ylim(C.min()*1.1,C.max()*1.1)
    plt.yticks([-1, 0, +1],
           [r'$-1$', r'$0$', r'$+1$'])
    
    ax = gca()
    ax.spines['right'].set_color('none')
    ax.spines['top'].set_color('none')
    ax.xaxis.set_ticks_position('bottom')
    ax.spines['bottom'].set_position(('data',0))
    ax.yaxis.set_ticks_position('left')
    ax.spines['left'].set_position(('data',0))
    
    plt.show()
    

    在这里插入图片描述

    7. 添加图例

    plt.plot(x, C, color="blue", linewidth=2.5, linestyle="-",label="cosine")
    # label参数解释每个图像代表的含义,为legend函数做铺垫。
    plt.plot(x, S, color="red", linewidth=2.5, linestyle="-",label="sine")
    
    legend(loc='upper left') #图例所有图像位置。
    
    <matplotlib.legend.Legend at 0x215970188d0>
    

    在这里插入图片描述

    8. 为一些特殊点做注释

    函数annotate标注绘图的某些特征,需要考虑:由参数xy表示的标注位置和xytext的文本位置。两参数都是(x,y)元组。

    plt.plot(x, C, color="blue", linewidth=2.5, linestyle="-",label="cosine")
    # label参数解释每个图像代表的含义,为legend函数做铺垫。
    plt.plot(x, S, color="red", linewidth=2.5, linestyle="-",label="sine")
    
    legend(loc='upper left') #图例所有图像位置。
    
    plt.xlim(x.min()*1.1, x.max()*1.1)
    # 设置x轴的格式,真实数值和显示数值结合。显示数值使用latex格式。
    plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi],
           [r'$-\pi$', r'$-\pi/2$', r'$0$', r'$+\pi/2$', r'$+\pi$'])
    
    plt.ylim(C.min()*1.1,C.max()*1.1)
    plt.yticks([-1, 0, +1],
           [r'$-1$', r'$0$', r'$+1$'])
    
    ax = gca()
    ax.spines['right'].set_color('none')
    ax.spines['top'].set_color('none')
    ax.xaxis.set_ticks_position('bottom')
    ax.spines['bottom'].set_position(('data',0))
    ax.yaxis.set_ticks_position('left')
    ax.spines['left'].set_position(('data',0))
    
    t = 2*np.pi/3
    # 绘制连接两点的虚线
    plot([t,t],[0,np.cos(t)],color = 'blue',linewidth = 2.5,linestyle = "--")
    # scatter绘制散点图,[t,],[np.cos(t),]表示x,y坐标,以数组形式表示。
    # 50为标量或数组表形状
    scatter([t,],[np.cos(t),],50,color='blue')
    
    # xy表示标注位置,xytext表示文本位置,xycoords表示依据轴,arrowprops表示箭头格式
    annotate(r'$\sin(\frac{2\pi}{3})=\frac{\sqrt{3}}{2}$',
             xy = (t,np.sin(t)),xycoords='data',
             xytext = (+10,+30),textcoords = 'offset points',fontsize=16,
             arrowprops=dict(arrowstyle="->",connectionstyle="arc3,rad=.2"))
    
    plot([t,t],[0,np.sin(t)],color = 'red',linewidth=2.5,linestyle="--")
    scatter([t,],[np.sin(t),],50,color='red')
    
    annotate(r'$\cos(\frac{2\pi}{3})=-\frac{1}{2}$',
             xy = (t,np.cos(t)),xycoords='data',
             xytext = (-90,-50),textcoords = 'offset points',fontsize=16,
             arrowprops=dict(arrowstyle="->",connectionstyle="arc3,rad=.2"))
    
    
    Text(-90, -50, '$\\cos(\\frac{2\\pi}{3})=-\\frac{1}{2}$')
    

    在这里插入图片描述

    9. 精细化修改图像

    # label参数解释每个图像代表的含义,为legend函数做铺垫。
    # 参数zorder是表征绘图顺序。隐藏在坐标轴下。
    plt.plot(x, C, color="blue", linewidth=2.5, linestyle="-", label="cosine",
             zorder=-1)
    plt.plot(x, S, color="red", linewidth=2.5, linestyle="-",  label="sine",
            zorder=-2)
    
    legend(loc='upper left') #图例所有图像位置。
    
    plt.xlim(x.min()*1.1, x.max()*1.1)
    # 设置x轴的格式,真实数值和显示数值结合。显示数值使用latex格式。
    plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi],
           [r'$-\pi$', r'$-\pi/2$', r'$0$', r'$+\pi/2$', r'$+\pi$'])
    
    plt.ylim(C.min()*1.1,C.max()*1.1)
    plt.yticks([-1, 0, +1],
           [r'$-1$', r'$0$', r'$+1$'])
    
    # gca函数获取当前坐标轴。gcf函数获取当前图像。
    ax = gca()
    ax.spines['right'].set_color('none')
    ax.spines['top'].set_color('none')
    ax.xaxis.set_ticks_position('bottom')
    ax.spines['bottom'].set_position(('data',0))
    ax.yaxis.set_ticks_position('left')
    ax.spines['left'].set_position(('data',0))
    
    t = 2*np.pi/3
    # 绘制连接两点的虚线
    plot([t,t],[0,np.cos(t)],color = 'blue',linewidth = 2.5,linestyle = "--")
    # scatter绘制散点图,[t,],[np.cos(t),]表示x,y坐标,以数组形式表示。
    #50为标量或数组表形状
    scatter([t,],[np.cos(t),],50,color='blue')
    
    # xy表示标注位置,xytext表示文本位置,xycoords表示依据轴,arrowprops表示箭头格式
    annotate(r'$\sin(\frac{2\pi}{3})=\frac{\sqrt{3}}{2}$',
             xy = (t,np.sin(t)),xycoords='data',
             xytext = (+10,+30),textcoords = 'offset points',fontsize=16,
             arrowprops=dict(arrowstyle="->",connectionstyle="arc3,rad=.2"))
    
    plot([t,t],[0,np.sin(t)],color = 'red',linewidth=2.5,linestyle="--")
    scatter([t,],[np.sin(t),],50,color='red')
    
    annotate(r'$\cos(\frac{2\pi}{3})=-\frac{1}{2}$',
             xy = (t,np.cos(t)),xycoords='data',
             xytext = (-90,-50),textcoords = 'offset points',fontsize=16,
             arrowprops=dict(arrowstyle="->",connectionstyle="arc3,rad=.2"))
    
    
    
    for label in ax.get_xticklabels() + ax.get_yticklabels():
        label.set_fontsize(16)
        label.set_bbox(dict(facecolor='white',edgecolor='None',alpha=0.65))
    

    在这里插入图片描述

    10. 图像、子图、坐标轴和记号

    1. 图像:用户界面看到的整个窗口内容。
    2. 子图:由坐标网格确定的图像。

    以下参数是图像的属性:

    参数默认值描述
    num1图像的数量
    figsizefigure.figsize图像的长和宽(英寸)
    dpifigure.dpi分辨率(点/英寸)
    facecolorfigure.facecolor绘图区域的背景颜色
    edgecolorfigure.edgecolor绘图区域边缘颜色
    frameonTrue是否绘制图像边缘

    matplotlib中可以使用close函数来关闭图形窗口:

    1. 不传递参数,关闭当前窗口。
    2. 传递窗口编号或窗口实例,关闭指定窗口。
    3. all,关闭所有窗口。

    10.1 子图

    可以用子图将图样放在均匀的坐标网格。

    from pylab import *
    
    # subplot(m,n,p),m,n分别表示在一个图像窗口中有m行n列图像区域组成。
    # subplot(m,n,p),p表示现在选定的是第p个图象区域。
    subplot(2,1,1)
    # xticks(ticks, [labels], **kwargs)函数
    # ticks,数组类型,来设置x轴刻度间隔,labels数组类型,设置每个间隔的显示标签。
    # **kwargs设置标签字体倾斜度和颜色等外观属性。
    xticks([]),yticks([])
    # plt.text(x, y, string, weight="bold", color="b")
    # 添加图形内容细节的无指向性注释文本。ha参数控制水平对齐方式, va控制垂直对齐方式。
    # alpha参数设置透明度。
    text(0.5,0.5,'subplot(2,1,1)',ha='center',va='center',size=24,alpha=0.5)
    
    subplot(2,1,2)
    xticks([]),yticks([])
    text(0.5,0.5,'subplot(2,1,2)',ha='center',va='center',size=24,alpha=0.5)
    
    show()
    

    在这里插入图片描述

    gridspec功能应用。

    from pylab import *
    
    import matplotlib.gridspec as gridspec
    
    # 将图像分为三行三列。
    G = gridspec.GridSpec(3,3)
    
    #第一个图占用了第1行和所有列。
    axes_1 = subplot(G[0,:])
    xticks([]),yticks([])
    text(0.5,0.5,'Axes 1',ha='center',va='center',size=24,alpha=0.5)
    
    # 第2个图,占用了第2行和第1列和第2列.
    axes_2 = subplot(G[1,:-1])
    xticks([]),yticks([])
    text(0.5,0.5,'Axes 2',ha='center',va='center',size=24,alpha=0.5)
    
    #第三个图占用了第2行和第3行和第3列。
    axes_3 = subplot(G[1:,-1])
    xticks([]),yticks([])
    text(0.5,0.5,'Axes 3',ha='center',va='center',size=24,alpha=0.5)
    
    # 第四个图占用了第3行和第1列.
    axes_4 = subplot(G[-1,0])
    xticks([]),yticks([])
    text(0.5,0.5,'Axes 4',ha='center',va='center',size=24,alpha=0.5)
    
    # 第5个图占用了第3行和第2列。
    axes_1 = subplot(G[-1,-2])
    xticks([]),yticks([])
    text(0.5,0.5,'Axes 5',ha='center',va='center',size=24,alpha=0.5)
    
    show()
    

    在这里插入图片描述

    10.2 坐标轴

    from pylab import *
    
    # plt.axes((left, bottom, width, height), facecolor=‘w’)
    # 使用subplot和axes具有同样的效果。axes生成子图应用很广泛。
    axes([0.1,0.1,0.8,0.8])
    
    xticks([]),yticks([])
    text(0.6,0.6,'axes([0.1,0.1,0.8,0.8])',ha='center',va='center',size=20,alpha=0.5)
    
    axes([0.2,0.2,0.3,0.3])
    
    xticks([]),yticks([])
    text(0.5,0.5,'axes([0.2,0.2,0.3,0.3])',ha='center',va='center',size=16,alpha=0.5)
    
    show()
    

    在这里插入图片描述

    10.3 记号

    11. 各种图的类型

    11.1 普通图

    from pylab import *
    import numpy as np
    
    n = 256
    # linspace用来创建等差数列,默认50个数值。
    x = np.linspace(-np.pi,np.pi,n,endpoint=True)
    y = np.sin(2*x)
    
    plot(x,y+1,color='blue',alpha=1)
    plot(x,y-1,color='blue',alpha=1)
    show()
    

    在这里插入图片描述

    1. linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
    2. endpoint=True,即stop对应数值为最后一个数
    3. retstep If True, return (samples, step), where step is the spacing between samples.
    4. plt.plot(x, y, ls=’-’, lw=2, label=‘xxx’, color=‘g’ ),其中label为标签文本

    11.2 散点图

    from pylab import *
    import numpy as np
    
    n = 1024
    # 参数为均值、标准差、shape。
    x = np.random.normal(0,1,n)
    y = np.random.normal(0,1,n)
    
    scatter(x,y)
    show()
    

    在这里插入图片描述

    scatter(x,y,s=20,c=‘b’,marker=‘o’,cmap=None,norm=None,vmin=None,vmax=None,alpha=None,linewidths=None,verts=None,hold=None,**kwargs)

    绘制散点图,x,y是相同长度的数组序列。

    参数属性功能
    x,y:形如shape[n]数组输入数据
    s:标量,形如shape[n,]数组,可选,默认20size in points^2
    c:色彩或颜色序列,可选,默认注意C不应是一个单一的RGB数字或RGBA序列,因为不便区分,可以是二维行数组
    marker:MarkerStyle,可选,默认’o’参阅markers属性
    cmap:Colormap,可选,默认:None颜色设置
    normNormalize可选,默认:None数据亮度0-1,float数据
    vmin、vmax:标量,可选,默认:None亮度设置,若norm实例已使用,则无效
    alpha:标量,可选,默认:None0-1
    linewidths:标量或数组,默认:None

    颜色参数:

    b—blue c—cyan g—green k—black

    m—magenta r—red w—white y—yellow

    优化图形

    from pylab import *
    import numpy as np
    
    n = 1024
    # 参数为均值、标准差、shape。
    x = np.random.normal(0,1,n)
    y = np.random.normal(0,1,n)
    # atan2() 返回给定的 X 及 Y 坐标值的反正切值。
    T = np.arctan2(y,x)
    
    axes([0.025,0.025,0.95,0.95])
    scatter(x,y,s=75,c=T,alpha=0.5)
    
    show()
    

    在这里插入图片描述

    11.3 条形图

    from pylab import *
    import numpy as np
    
    n = 12
    x = np.arange(n)
    # random.uniform()随机生成下一个实数,在[x,y]范围内。
    y1 = (1-x/float(n))*np.random.uniform(0.5,1.0,n)
    y2 = (1-x/float(n))*np.random.uniform(0.5,1.0,n)
    # bar(left, height, width, color, align, yerr),柱形图。
    bar(x,+y1,facecolor='#9999ff',edgecolor='white')
    bar(x,-y2,facecolor='#ff9999',edgecolor='white')
    
    # zip()将迭代对象打包成一个元组。
    for X,Y in zip(x,y1):
        text(X+0.4,Y+0.05,'%.2f' %Y,ha='center',va='bottom')
        
    ylim(-1.25,+1.25)
    show()
    

    在这里插入图片描述

    bar(left, height, width, color, align, yerr)绘制柱形图。

    1. align: 柱子对齐方式,有两个可选值:center和edge。center表示每根柱子是根据下标来对齐, edge则表示每根柱子全部以下标为起点,然后显示到下标的右边。如果不指定该参数,默认值是center。
    2. yerr:每根柱子顶端在纵轴方向的线段。如果指定一个固定值,所有柱子的线段将一直长;如果指定一个带有不同长度值的列表,那么柱子顶部的线段将呈现不同长度。

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

    如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。

    1. range(start, end, step),返回一个list对象,起始值为start,终止值为end,但不含终止值,步长为step。只能创建int型list。

    2. arange(start, end, step),与range()类似,但是返回一个array对象。需要引入import numpy as np,并且arange可以使用float型数据。

    11.4 等高线图

    from pylab import *
    import numpy as np
    
    def f(x,y): return (1-x/2+x**5+y**3)*np.exp(-x**2-y**2)
    
    n = 256
    # 生成等差数列,[-3,3]范围内。
    x = np.linspace(-3,3,n)
    y = np.linspace(-3,3,n)
    # meshgrid生成网格点坐标矩阵。生成二维矩阵。
    X,Y = np.meshgrid(x,y)
    # cmap=colormaps,获取图谱:plt.get_cmap(‘xxx’) 
    contourf(X,Y,f(X,Y),8,alpha=0.75,cmap='jet')
    C = contour(X,Y,f(X,Y),8,colors='black')
    # 在等高线上增加值标签,inline表征标签值嵌入轮廓中的相对位置。
    clabel(C, inline=1, fontsize=10)
    show()
    

    在这里插入图片描述

    X # meshgrid通常使用在数据的矢量化上,可以接受两个一维数组生成两个二维矩阵,对应两个数组中所有的(x,y)对。
    
    array([[-3.        , -2.97647059, -2.95294118, ...,  2.95294118,
             2.97647059,  3.        ],
           [-3.        , -2.97647059, -2.95294118, ...,  2.95294118,
             2.97647059,  3.        ],
           [-3.        , -2.97647059, -2.95294118, ...,  2.95294118,
             2.97647059,  3.        ],
           ...,
           [-3.        , -2.97647059, -2.95294118, ...,  2.95294118,
             2.97647059,  3.        ],
           [-3.        , -2.97647059, -2.95294118, ...,  2.95294118,
             2.97647059,  3.        ],
           [-3.        , -2.97647059, -2.95294118, ...,  2.95294118,
             2.97647059,  3.        ]])
    
    x
    
    array([-3.        , -2.97647059, -2.95294118, -2.92941176, -2.90588235,
           -2.88235294, -2.85882353, -2.83529412, -2.81176471, -2.78823529,
           -2.76470588, -2.74117647, -2.71764706, -2.69411765, -2.67058824,
           -2.64705882, -2.62352941, -2.6       , -2.57647059, -2.55294118,
           -2.52941176, -2.50588235, -2.48235294, -2.45882353, -2.43529412,
           -2.41176471, -2.38823529, -2.36470588, -2.34117647, -2.31764706,
           -2.29411765, -2.27058824, -2.24705882, -2.22352941, -2.2       ,
           -2.17647059, -2.15294118, -2.12941176, -2.10588235, -2.08235294,
           -2.05882353, -2.03529412, -2.01176471, -1.98823529, -1.96470588,
           -1.94117647, -1.91764706, -1.89411765, -1.87058824, -1.84705882,
           -1.82352941, -1.8       , -1.77647059, -1.75294118, -1.72941176,
           -1.70588235, -1.68235294, -1.65882353, -1.63529412, -1.61176471,
           -1.58823529, -1.56470588, -1.54117647, -1.51764706, -1.49411765,
           -1.47058824, -1.44705882, -1.42352941, -1.4       , -1.37647059,
           -1.35294118, -1.32941176, -1.30588235, -1.28235294, -1.25882353,
           -1.23529412, -1.21176471, -1.18823529, -1.16470588, -1.14117647,
           -1.11764706, -1.09411765, -1.07058824, -1.04705882, -1.02352941,
           -1.        , -0.97647059, -0.95294118, -0.92941176, -0.90588235,
           -0.88235294, -0.85882353, -0.83529412, -0.81176471, -0.78823529,
           -0.76470588, -0.74117647, -0.71764706, -0.69411765, -0.67058824,
           -0.64705882, -0.62352941, -0.6       , -0.57647059, -0.55294118,
           -0.52941176, -0.50588235, -0.48235294, -0.45882353, -0.43529412,
           -0.41176471, -0.38823529, -0.36470588, -0.34117647, -0.31764706,
           -0.29411765, -0.27058824, -0.24705882, -0.22352941, -0.2       ,
           -0.17647059, -0.15294118, -0.12941176, -0.10588235, -0.08235294,
           -0.05882353, -0.03529412, -0.01176471,  0.01176471,  0.03529412,
            0.05882353,  0.08235294,  0.10588235,  0.12941176,  0.15294118,
            0.17647059,  0.2       ,  0.22352941,  0.24705882,  0.27058824,
            0.29411765,  0.31764706,  0.34117647,  0.36470588,  0.38823529,
            0.41176471,  0.43529412,  0.45882353,  0.48235294,  0.50588235,
            0.52941176,  0.55294118,  0.57647059,  0.6       ,  0.62352941,
            0.64705882,  0.67058824,  0.69411765,  0.71764706,  0.74117647,
            0.76470588,  0.78823529,  0.81176471,  0.83529412,  0.85882353,
            0.88235294,  0.90588235,  0.92941176,  0.95294118,  0.97647059,
            1.        ,  1.02352941,  1.04705882,  1.07058824,  1.09411765,
            1.11764706,  1.14117647,  1.16470588,  1.18823529,  1.21176471,
            1.23529412,  1.25882353,  1.28235294,  1.30588235,  1.32941176,
            1.35294118,  1.37647059,  1.4       ,  1.42352941,  1.44705882,
            1.47058824,  1.49411765,  1.51764706,  1.54117647,  1.56470588,
            1.58823529,  1.61176471,  1.63529412,  1.65882353,  1.68235294,
            1.70588235,  1.72941176,  1.75294118,  1.77647059,  1.8       ,
            1.82352941,  1.84705882,  1.87058824,  1.89411765,  1.91764706,
            1.94117647,  1.96470588,  1.98823529,  2.01176471,  2.03529412,
            2.05882353,  2.08235294,  2.10588235,  2.12941176,  2.15294118,
            2.17647059,  2.2       ,  2.22352941,  2.24705882,  2.27058824,
            2.29411765,  2.31764706,  2.34117647,  2.36470588,  2.38823529,
            2.41176471,  2.43529412,  2.45882353,  2.48235294,  2.50588235,
            2.52941176,  2.55294118,  2.57647059,  2.6       ,  2.62352941,
            2.64705882,  2.67058824,  2.69411765,  2.71764706,  2.74117647,
            2.76470588,  2.78823529,  2.81176471,  2.83529412,  2.85882353,
            2.88235294,  2.90588235,  2.92941176,  2.95294118,  2.97647059,
            3.        ])
    

    mgrid():返回多维结构,常见的如2D图形,3D图形。对比np.meshgrid,在处理大数据时速度更快,且能处理多维(np.meshgrid只能处理2维)
    ret = np.mgrid[ 第1维,第2维 ,第3维 , …]
    返回多值,以多个矩阵的形式返回,

    第1返回值为第1维数据在最终结构中的分布,

    第2返回值为第2维数据在最终结构中的分布,以此类推。

    contour和contourf都是三维等高线图绘制函数,contourf对等高线间的区域进行填充。

    其中前两个参数x和y为两个等长一维数组,第三个参数z为二维数组(表示平面点xi,yi映射的函数值)。

    coutour([X, Y,] Z,[levels], **kwargs):

    11.5 热图(灰度图)

    from pylab import *
    import numpy as np
    
    def f(x,y): return (1-x/2+x**5+y**3)*np.exp(-x**2-y**2)
    
    n = 10
    x = np.linspace(-3,3,4*n)
    y = np.linspace(-3,3,3*n)
    X,Y = np.meshgrid(x,y)
    # imshow函数是灰度图绘制的主要函数。
    imshow(f(X,Y))
    # 增加边条标签
    colorbar(shrink=.92)
    show()
    

    在这里插入图片描述

    imshow(X, cmap=None, norm=None, aspect=None,
    interpolation=None, alpha=None, vmin=None, vmax=None,
    origin=None, extent=None, shape=None, filternorm=1,
    filterrad=4.0, imlim=None, resample=None, url=None, **kwargs)

    • X 可以使类似数组的对象,或者是PIL类型图像,其中,数组对象可选shape为:

      (M, N)
      单纯的二维数组,元素是标量数据,会通过colormap展示
      (M, N, 3)
      RGB三通道图像,元素值可以是0−1
      
      之间的float或者0−255
      之间的int
      (M, N, 4)
      
      RGBA图像,多出来的一维属性,比如是透明度,其元素值和3通道的一样,可以是0−1
      之间的float或者0−255之间的int
      
    • cmap

      str 或 matplotlib.colors.Colormap类型,用于将标量数据映射到颜色的Colormap实例或已注册的Colormap名称。
      
    • norm

      在使用cmap之前,用来将二维数组数据归一化到[0,1],默认是线性的,最小值对应0,最大值对应1。
      
    • interpolation 插值方法,默认’nearest’,可以支持的方法有:

      'none'
      'nearest'
      'bilinear'
      'bicubic'
      'spline16'
      'spline36'
      'hanning'
      'hamming'
      'hermite'
      'kaiser'
      'quadric'
      'catrom'
      'gaussian'
      'bessel'
      'mitchell'
      'sinc'
      'lanczos'
      
    • vmin, vmax

      当输入的时二维数组标量数据并且没有明确的norm时,vmin和vmax定义colormap覆盖的数据范围,默认情况下,colormap覆盖所提供的值的完整范围数据
      
    • origin

      坐标轴的样式,可选值为upper和lower
      

      利用seaborn生成的热图,cbar=True可以默认生成colorbar。

    • Seaborn的heatmap各参数介绍

      seaborn.heatmap(data,vmin=None,vmax=None,cmap=None,center=None,robust=False,annot=None,fmt='2g',annotkws=None,linewidths=0,linecolor='white',
      cbar=True,cbarkws=None,cbar_ax=None,square=False,ax=None,xticklabels=Ture,yticklabels=Ture,mask=None,**kwargs)
      
    • data

      矩阵数据集,可以使numpy数组,如果是pandas的数据框dataframe,则df的index/column信息会分别对应到heatmap的columns和rows。
      
    • linewidths:

      热力图矩阵之间的间隔大小。 vmax,vmin:
      
      图例中最大值和最小值的显示值,没有该参数时默认不显示。
      

    11.6 饼状图

    from pylab import *
    import numpy as np
    
    n = 20
    # 生成随机的下一个实数,在[0,1]范围内。
    Z = np.random.uniform(0,1,n)
    pie(Z,explode=Z*0.5)
    show()
    

    在这里插入图片描述

    plt.pie(x, labels= …):

    属性说明类型
    x数据list
    labels标签list
    autopct数据标签%0.1%%保留一位小数
    explode突出的部分list
    shadow是否显示阴影bool
    pctdistance数据标签距离圆心的位置0-1
    labeldistance标签的比例float
    startangle开始绘图的角度float
    radius半径长默认是1

    11.7 量场图

    from pylab import *
    import numpy as np
    
    n = 8
    X,Y = np.mgrid[0:n,0:n]
    quiver(X,Y)
    show()
    

    在这里插入图片描述

    11.8 网格

    from pylab import *
    import numpy as np
    
    ax = axes([0.025,0.025,0.95,0.95])
    ax.set_xlim(0,4)
    ax.set_ylim(0,3)
    ax.xaxis.set_major_locator(MultipleLocator(1.0))
    ax.xaxis.set_minor_locator(MultipleLocator(0.1))
    ax.yaxis.set_major_locator(MultipleLocator(1.0))
    ax.yaxis.set_minor_locator(MultipleLocator(0.1))
    ax.grid(which='major', axis='x', linewidth=0.75, linestyle='-', color='0.75')
    ax.grid(which='minor', axis='x', linewidth=0.25, linestyle='-', color='0.75')
    ax.grid(which='major', axis='y', linewidth=0.75, linestyle='-', color='0.75')
    ax.grid(which='minor', axis='y', linewidth=0.25, linestyle='-', color='0.75')
    ax.set_xticklabels([])
    ax.set_yticklabels([])
    
    show()
    

    在这里插入图片描述

    11.9 极轴图

    from pylab import *
    import numpy as np
    
    # axes
    axes([0,0,1,1],polar=True)
    
    N = 20
    theta = np.arange(0.0,2*np.pi,2*np.pi/N)
    radii = 10*np.random.rand(N)
    width = np.pi/4*np.random.rand(N)
    bars = bar(theta,radii,width=width,bottom=0.0)
    
    for r,bar in zip(radii,bars):
        bar.set_facecolor(cm.jet(r/10.0))
        bar.set_alpha(0.5)
        
    show()
    

    在这里插入图片描述

    11.10 3D图

    %matplotlib inline
    import matplotlib.pyplot as plt
    import numpy as np
    from mpl_toolkits.mplot3d import Axes3D
    
    fig = plt.figure()
    ax = Axes3D(fig)
    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 = np.sin(R)
    ax.plot_surface(X,Y,Z,rstride=1,cstride=1,cmap='jet')
    ax.contourf(X,Y,Z,zdir='z',offset=-2,cmap='jet')
    ax.set_zlim(-2,2)
    plt.show()
    

    在这里插入图片描述

    11.11 手稿图

    %matplotlib inline
    import matplotlib.pyplot as plt
    import numpy as np
    
    eqs = []
    eqs.append((r"$W^{3\beta}_{\delta_1 \rho_1 \sigma_2} = U^{3\beta}_{\delta_1 \rho_1} + \frac{1}{8 \pi 2} \int^{\alpha_2}_{\alpha_2} d \alpha^\prime_2 \left[\frac{ U^{2\beta}_{\delta_1 \rho_1} - \alpha^\prime_2U^{1\beta}_{\rho_1 \sigma_2} }{U^{0\beta}_{\rho_1 \sigma_2}}\right]$"))
    eqs.append((r"$\frac{d\rho}{d t} + \rho \vec{v}\cdot\nabla\vec{v} = -\nabla p + \mu\nabla^2 \vec{v} + \rho \vec{g}$"))
    eqs.append((r"$\int_{-\infty}^\infty e^{-x^2}dx=\sqrt{\pi}$"))
    eqs.append((r"$E = mc^2 = \sqrt{{m_0}^2c^4 + p^2c^2}$"))
    eqs.append((r"$F_G = G\frac{m_1m_2}{r^2}$"))
    
    
    plt.axes([0.025,0.025,0.95,0.95])
    
    for i in range(24):
        index = np.random.randint(0,len(eqs))
        eq = eqs[index]
        size = np.random.uniform(12,32)
        x,y = np.random.uniform(0,1,2)
        alpha = np.random.uniform(0.25,.75)
        plt.text(x, y, eq, ha='center', va='center', color="#11557c", alpha=alpha,
                 transform=plt.gca().transAxes, fontsize=size, clip_on=True)
    
    plt.xticks([]), plt.yticks([])
    # savefig('../figures/text_ex.png',dpi=48)
    plt.show()
    
    

    在这里插入图片描述

    展开全文
  • 作图存在汉字无法显示 在作图代码前添加如下代码 plt.rcParams['font.sans-serif...plt.plot()中有一个参数 ‘linewidth’,修改参数可以改变曲线粗细程度 一个坐标系中存在多个曲线,给曲线命名 plt.plot()中有一个...

    作图存在汉字无法显示

    在作图代码前添加如下代码

    plt.rcParams['font.sans-serif'] = ['SimHei']
    plt.rcParams['axes.unicode_minus'] = False
    

    作图的曲线粗细调整

    plt.plot()中有一个参数 ‘linewidth’,修改参数可以改变曲线粗细程度

    一个坐标系中存在多个曲线,给曲线命名

    plt.plot()中有一个参数 ‘label’,对应该函数画出的曲线

    使用plt.plot()设定了label后并未画出

    在后面添加如下代码

    plt.legend()
    

    坐标轴label

    font = {'family': 'Times New Roman', 'weight': 'normal', 'size': 23}
    plt.xlabel('x position', font)
    plt.ylabel('y position', font)
    

    给定坐标系长度

    将坐标系固定为横坐标0 ~ 100,纵坐标0 ~ 350

    plt.axis([0, 100, 0, 350])
    

    坐标系名字

    font = {'family': 'Times New Roman', 'weight': 'normal', 'size': 23}
    plt.title('name', font)
    

    坐标系标度字体大小

    plt.xticks(fontsize=20)
    plt.yticks(fontsize=20)
    
    展开全文
  • 基于matplotlib,能够简便的画图 独特的数据结构 2.安装 pip install pandas 3.API 导入数据 pd.read_csv(filename):从CSV文件导入数据 pd.read_table(filename):从限定分隔符的文本文件导入数据 pd.read_excel...

    Pandas

    1.介绍

    • 专门用于数据挖掘的开源python库
    • 以Numpy为基础,借力Numpy模块在计算方面性能高的优势
    • 基于matplotlib,能够简便的画图
    • 独特的数据结构

    2.安装

    pip install pandas
    

    3.API

    导入数据

    pd.read_csv(filename):从CSV文件导入数据

    pd.read_table(filename):从限定分隔符的文本文件导入数据

    pd.read_excel(filename):从Excel文件导入数据

    pd.read_sql(query, connection_object):从SQL表/库导入数据

    pd.read_json(json_string):从JSON格式的字符串导入数据

    pd.read_html(url):解析URL、字符串或者HTML文件,抽取其中的tables表格

    pd.read_clipboard():从你的粘贴板获取内容,并传给read_table()

    pd.DataFrame(dict):从字典对象导入数据,Key是列名,Value是数据

    导出数据

    df.to_csv(filename):导出数据到CSV文件

    df.to_excel(filename):导出数据到Excel文件

    df.to_sql(table_name, connection_object):导出数据到SQL表

    df.to_json(filename):以Json格式导出数据到文本文件

    创建测试对象

    pd.DataFrame(np.random.rand(20,5)):创建20行5列的随机数组成的DataFrame对象

    pd.Series(my_list):从可迭代对象my_list创建一个Series对象

    df.index = pd.date_range(‘1900/1/30’, periods=df.shape[0]):增加一个日期索引

    查看、检查数据

    df.head(n):查看DataFrame对象的前n行

    df.tail(n):查看DataFrame对象的最后n行

    df.shape[0], df.shape[1]:分别查看行数和列数

    df.info():查看索引、数据类型和内存信息

    df.describe():查看数值型列的汇总统计

    s.value_counts(dropna=False):查看Series对象的唯一值和计数

    s.count() :非空值数量

    df.apply(pd.Series.value_counts):查看DataFrame对象中每一列的唯一值和计数

    数据选取

    df[col]:根据列名,并以Series的形式返回列

    df[[col1, col2]]:以DataFrame形式返回多列

    s.iloc[0]:按位置选取数据

    s.loc[‘index_one’]:按索引选取数据

    df.iloc[0,:]:返回第一行

    df.iloc[0,0]:返回第一列的第一个元素

    数据清理

    df.columns = [‘a’,‘b’,‘c’]:重命名列名

    pd.isnull():检查DataFrame对象中的空值,并返回一个Boolean数组

    pd.notnull():检查DataFrame对象中的非空值,并返回一个Boolean数组

    df.dropna():删除所有包含空值的行

    df.dropna(axis=1):删除所有包含空值的列

    df.dropna(axis=1,thresh=n):删除所有小于n个非空值的行

    df.fillna(x):用x替换DataFrame对象中所有的空值

    s.astype(float):将Series中的数据类型更改为float类型

    s.replace(1,‘one’):用‘one’代替所有等于1的值

    s.replace([1,3],[‘one’,‘three’]):用’one’代替1,用’three’代替3

    df.rename(columns=lambda x: x + 1):批量更改列名

    df.rename(columns={‘old_name’: ‘new_ name’}):选择性更改列名

    df.set_index(‘column_one’):更改索引列

    df.rename(index=lambda x: x + 1):批量重命名索引

    数据处理

    df[df[col] > 0.5]:选择col列的值大于0.5的行

    df.sort_values(col1):按照列col1排序数据,默认升序排列

    df.sort_values(col2, ascending=False):按照列col1降序排列数据

    df.sort_values([col1,col2], ascending=[True,False]):先按列col1升序排列,后按col2降序排列数据

    df.groupby(col):返回一个按列col进行分组的Groupby对象

    df.groupby([col1,col2]):返回一个按多列进行分组的Groupby对象

    df.groupby(col1)[col2]:返回按列col1进行分组后,列col2的均值

    df.pivot_table(index=col1, values=[col2,col3], aggfunc=max):创建一个按列col1进行分组,并计算col2和col3的最大值的数据透视表

    df.groupby(col1).agg(np.mean):返回按列col1分组的所有列的均值

    data.apply(np.mean):对DataFrame中的每一列应用函数np.mean

    data.apply(np.max,axis=1):对DataFrame中的每一行应用函数np.max

    df.get_dummies() :one-hot编码

    s.map() , df.applymap():映射

    数据合并

    df1.append(df2):将df2中的行添加到df1的尾部

    df.concat([df1, df2],axis=1):将df2中的列添加到df1的尾部

    df1.join(df2,on=col1,how=‘inner’):对df1的列和df2的列执行SQL形式的join

    数据统计

    df.describe():查看数据值列的汇总统计

    df.mean():返回所有列的均值

    df.corr():返回列与列之间的相关系数

    df.count():返回每一列中的非空值的个数

    df.max():返回每一列的最大值

    df.min():返回每一列的最小值

    df.median():返回每一列的中位数

    df.std():返回每一列的标准差

    画图

    df.plot(x=None,y=None,kind=’ ') :

    • x : 横轴(可选) 列名或 列名的数值索引, 默认为None, 行索引
    • y : 纵轴(可选) 列名或 列名的数值索引或其列表, 默认所有的数据列
    • kind : str(可选)
    • ‘line’ : line plot (default) 折线图
    • ‘bar’ : vertical bar plot 垂直方向柱状图
    • ‘barh’ : horizontal bar plot 水平方向柱状图
    • ‘hist’ : histogram 直方图
    • ‘pie’ : pie plot 饼状图
    • ‘scatter’ : scatter plot 散点图
      更多参数细节:pandas文档

    matplotlib

    1.介绍

    • 专门用于开发2D图表(包括3D图表)
    • 使用起来及其简单
    • 以渐进、交互式方式实现数据可视化

    2.安装

    pip install matplotlib
    

    3.API
    plt.title() 标题

    plt.xlabel() x轴描述

    plt.ylabel() y轴描述

    plt.xticks() x轴刻度

    plt.yticks() y轴刻度

    plt.plot() 画图

    plt.show() 显示

    plt.grid() 添加网格

    plt.legend() 显示图例

    plt.subplot() 同一图绘制不同东西

    plt.bar() 条形图

    ptt.hist() 直方图

    seaborn

    1.介绍
    Seaborn是基于matplotlib的Python数据可视化库。它提供了一个高级界面,用于绘制引人入胜且内容丰富的统计图形。

    2.安装

    pip install seaborn
    

    3.API

    分布图
    sns.displot(a, bins=None, hist=True, kde=True, rug=False, fit=None, hist_kws=None, kde_kws=None, rug_kws=None, fit_kws=None, color=None, vertical=False, norm_hist=False, axlabel=None, label=None, ax=None)

    更多详情:seaborn官网

    seaborn接触的不多所以有需求得还是去看官网吧,里面对参数都有详细得解答
    有不对的地方欢迎指正或者补充
    在这里插入图片描述

    展开全文
  • 有关matplotlib绘图的细节记录
  • matplotlib.pyplot.plot()参数详解 plt.plot(x,y,format_string,**kwargs) x轴数据,y轴数据,format_string控制曲线的格式字串。 format_string 由颜色字符,风格字符 和 标记字符 组成。参数是一个可变长度...
  • pyplot是替代matlab的一个很好的选择,不过默认的曲线绘图不够美观,这里对一些细节参数进行了修改,以供各位参考。 2. 绘图效果对比 修改前(右图)与修改后(左图)对比 注:图中曲线数据来源是对文献 ...
  • python matplotlib画图细节实现

    千次阅读 2015-11-20 20:14:24
    我的个人博客:...在实现matplotlib绘图时,往往还需要对其细节进行更详尽的绘制,matplotlib库提供了丰富的方法,和属性供选择。 __author__ = 'lee' # 2015年11月05日13:03:37 import matplotlib.pyp
  • plt.xticks()第一个参数接受坐标,第二个参数接受,各坐标显示的文本,关键字参数,如 rotation,表示文本显示时旋转的角度,为了达到一种美观的效果。 import matplotlib.pyplot as plt import numpy as npif __...
  • 文章目录0.matplotlib自带的TeX功能1.添加图列legend()2.添加标题title()3.调节刻度范围xlim()和刻度标签xticks()4.逆序设置坐标轴标签xlim() 0.matplotlib自带的TeX功能 用Tex对文本内容进行渲染,通过使用r"$$...
  • matplotlib

    2019-09-16 11:02:09
    matplotlib:Python中常用的图形框架 可以绘制线图 散点图 等高线图 条形图 柱状图 3D图形 图形动画等 调用 import numpy as np import pandas as pd import matplotlib.pyplot as plt # 下面两句避免...
  • 个人认为用Matplotlib画出一张图来不难,难的是对于一些细节东西的设置,可能在一个小小的细节处理上就得百度好久,所以可以先点收藏了再看,需要的时候可以及时找出来看看。 先上一张官方绘...
  • Matplotlib 教程

    2018-05-24 10:53:05
    Matplotlib 教程 本文为译文,原文载于此,译文原载于此。本文欢迎转载,但请保留本段文字,尊重作者和译者的权益。谢谢。: ) 介绍 Matplotlib 可能是 Python 2D-绘图领域使用最广泛的套件。它能让使用者很...
  • Matplotlib 图例指南

    2020-11-25 20:32:01
    更多关于matplotlib的学习请关注博客文章 图例指南  在Matplotlib中灵活地生成图例  在阅读这一章节前请熟悉关于 legend()的讲解 一些常用用语: 图例条目 图例由一个或多个图例条目组成。一项仅由一个键和...
  • Matplotlib 图片教程

    2020-11-25 20:29:16
    更多关于matplotlib的学习请关注博客文章 图片教程 利用matplotlib处理图片 导入 import matplotlib.pyplot as plt import matplotlib.image as mpimg 将图像数据导入到NumPy数组 这是我们要处理的图片: 让...
  • 数据可视化之matplotlib-01引入matplotlib.pyplot包与全局中文字体设置Plot快速绘图plt.plot()其他常用参数常用的图像设置命令plt.title()plt.xlim()&plt.xlabel()&plt.ylabel()plt.grid() 引入matplotlib....
  • 如何通过 Matplotlib 绘制动画及保存 GIF 图片?

    万次阅读 多人点赞 2018-12-10 15:41:32
    好在用 Python 实现动画有许多中方式,而大家熟知的 Matplotlib 库就可以实现。 本文的目的是对 Matplotlib 的动画实现手段做一个简单的说明。 绘制动画 import matplotlib.pyplot as plt import matplotlib....
  • 作为Python生态中应用最广泛的绘图库,Matplotlib用起来非常简单,也很容易上手。不过有些细节想要做得尽善尽美,就需要仔细阅读它的文档了。对于初学者来说,反转坐标轴、绘制双轴(将两个动态范围不同的数据绘制在...
  • python成为专业人士笔记​biblog.bistudio.com.cnMatplotlib介绍matplotlib是Python编程语言及其数值数学扩展包 NumPy的可视化操作界面。它利用通用的图形用户界面工具包,如Tkinter, wxPython, Qt或GTK+,向应用...
  • 由于matplotlib是一个专业,工业化的图形库,它对很多细节性的功能也作了深入的定制,让它满足各种各样的需求。在本文里就介绍一下怎么样来设置曲线的点划线的样式,如下图: 像上图就有很多类型的点划线,在...
  • matplotlib绘制图标 1.matplotlib的内容组织在画布上(及绘图区),图形的Axes实例包含了matolotlib的所有组成元素,如坐标轴,刻度,标签,线和标记等,这些元素通过调用matplotlib.pyplot模块中相应的函数,进行...
  • python之matplotlib详解

    万次阅读 多人点赞 2018-07-15 16:18:18
    matplotlib是基于Python语言的开源项目,旨在为Python提供一个数据绘图包。我将在这篇文章中介绍matplotlib API的核心对象,并介绍如何使用这些对象来实现绘图。实际上,matplotlib的对象体系严谨而有趣,为使用者...
  • 同样,如果使用函数构造的图片,也可以去掉一些细节进行显示。 为了演示norm参数的使用,先来构造一些网格数据: # 使用小的变量来增加解析度 dx, dy = 0.05, 0.05 # 生成两个2维的网格 ..
  • 由于matplotlib可以产生工业标准的绘图,因此在每一个细节上都是高要求,高标准的。在本文里就介绍一下,线段与线段之间的连接样式,线段两端的绘制样式。如果只是在普通的示意图里,可能不需要关心这样的细节,但是...
  • Matplotlib Tips

    2021-03-02 14:20:04
    Matplotlib Tips 细节技巧 去除坐标轴框线 fig, ax=plt.subplots() # 去掉框线 ax.spines['top'].set_visible(True) ax.spines['right'].set_visible(False) ax.spines['bottom'].set_visible(True) ax.spines['...
  • Matplotlib 是 Python 的绘图库。 它可与 NumPy 一起使用,提供了一种有效的 MatLab 开源替代方案。 它也可以和图形工具包一起使用,如 PyQt 和 wxPython。本文由浅入深,教你画柱状图
  • Python3与Python2在一些细节上会有所不同,希望广大读者注意。本博客以代码为主,代码中会有详细的注释。相关文章将会发布在我的个人博客专栏《Python从入门到深度学习》,欢迎大家关注。   目录 一、Python机器...
  • 如果你认为下面的图比较美观,尤其是标注文本与箭头的连接部分。...matplotlib.pyplot.annotate(text, xy, *args, **kwargs)。 text:The text of the annotation. 注释文本的内容 xy:The point (x, y) to annot.
  • matplotlib基础学习

    千次阅读 2017-12-29 15:52:11
    matplotlib介绍  matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图。而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中。它的文档相当完备,并且Gallery...
  • Matplotlib中plt.rcParams用法(设置图像细节) import numpy as np import matplotlib.pyplot as plt from matplotlib.colors import ListedColormap %matplotlib inline # 生成数据 x =...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,867
精华内容 2,746
关键字:

matplotlib细节参数