前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >matplotlib 入门使用指南

matplotlib 入门使用指南

作者头像
syy
发布2020-04-07 16:25:09
9260
发布2020-04-07 16:25:09
举报
文章被收录于专栏:多选参数多选参数
1. pyplot模块

1.1. color的值

代码语言:javascript
复制
blue
1.2. Marker的值
代码语言:javascript
复制
point marker
1.3. LineStyles的值
代码语言:javascript
复制
solid line style

例子:

代码语言:javascript
复制
'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

2. 示例

2.1. 简单的plot()方法使用

代码语言:javascript
复制
import matplotlib.pyplot as plt
import numpy as np

def zhexiantu():
    '''
    简单的plot使用
    '''

    x = np.array([1, 2, 3, 4, 5, 6, 7, 8])    
    y = np.array([3, 5, 7, 6, 2, 6, 10, 15])
    #x, y可以是列表
    plt.plot(x, y, color='red', marker='o', linewidth=1.0, linestyle='-')
    # color和marker可以合并省略,如下所示,效果是一样
    # plt.plot(x, y, 'ro',  lw=1.0, ls='-')
    plt.show()

2.2. 函数的画法

跟plot的使用差不多,只是需要的数据量很大

代码语言:javascript
复制
import matplotlib.pyplot as plt
import numpy as np

def hanshu():
    '''
    画函数图像
    '''
    # linspace 指定开始、结束、数的个数
    # 从-1-----1之间等间隔采66个数.也就是说所画出来的图形是66个点连接得来的
    # 注意:如果点数过小的话会导致画出来二次函数图像不平滑
    x = np.linspace(-1, 1, 66)
    y1 = 2 * x + 1
    y2 = x ** 2

    plt.plot(x, y1)
    plt.show()

    plt.plot(x, y2)
    plt.show()

2.3. 柱状图的画法

代码语言:javascript
复制
import matplotlib.pyplot as plt
import numpy as np

def barPicture():
    '''
    柱状图的画法
    '''

    '''1.简单的'''
    x = np.array([1,2,3,4,5,6,7,8])
    y = np.array([13,25,17,36,21,16,10,15])
    plt.bar(x, y, 0.2, alpha=0.5 ,color="b")
    plt.show()

    '''2.复杂的'''
    # x = np.arange(10)
    # y1 = (1 - x / float(10) * np.random.uniform(0.5, 1.0, 10))
    # y2 = (1 - x / float(10) * np.random.uniform(0.5, 1.0, 10))
    #
    # # 绘制柱状图,向上
    # plt.bar(x, y1, facecolor='blue', edgecolor='white')
    # # 绘制柱状图,向下
    # plt.bar(x, -y2, facecolor='green', edgecolor='white')
    #
    # # 进行标注
    # for x, y1, y2 in zip(x, y1, y2):
    #     plt.text(x + 0.05, y1 + 0.1, '%.2f' % y1, ha='center', va='bottom')
    #     plt.text(x + 0.05, -y2 - 0.1, '%.2f' % y2, ha='center', va='bottom')
    #
    # # 设置x和y轴的坐标范围
    # plt.xlim(-1, 10)
    # plt.ylim(-1.5, 1.5)
    # # 设置x和y轴的坐标显示为空
    # plt.xticks(())
    # plt.yticks(())
    #
    # plt.show()

2.4. 直方图的画法

代码语言:javascript
复制
import matplotlib.pyplot as plt
import numpy as np

def histUse():
    '''
    直方图的画法
    '''

    p = np.random.rand(1000)

    # bins 表示分为20个类
    plt.hist(p, bins=20, color='g', edgecolor='k')
    plt.show()

2.5. 散点图

代码语言:javascript
复制
import matplotlib.pyplot as plt
import numpy as np

def scatterUse():
    '''
    散点图
    '''

    x = np.random.normal(0, 1, 1024)
    y = np.random.normal(0, 1, 1024)

    color = np.arctan2(y, x)
    # 绘制散点图
    plt.scatter(x, y, s=75, c=color, alpha=0.5)

    # 设置坐标轴范围
    plt.xlim((-1.5, 1.5))
    plt.ylim((-1.5, 1.5))

    # 不显示坐标轴的值
    plt.xticks(())
    plt.yticks(())
    plt.show()

2.6. 等高线

代码语言:javascript
复制
import matplotlib.pyplot as plt
import numpy as np

def meanHigh():
    '''
    等高线图
    '''

    x = np.linspace(-3, 3, 256)
    y = np.linspace(-3, 3, 256)

    # 生成网格数据
    X, Y = np.meshgrid(x, y)

    # 填充等高线的颜色,8是等高线分成几部分
    plt.contourf(X, Y, (1 - X / 2 + X ** 5 + Y ** 3) * np.exp(- X ** 2 - Y ** 2),
                 8, alpha=0.75, cmap=plt.cm.hot)
    # 绘制等高线
    C = plt.contour(X, Y, (1 - X / 2 + X ** 5 + Y ** 3) * np.exp(- X ** 2 - Y ** 2),
                    8, colors='black', lw=0.5)
    # 添加数值
    plt.clabel(C, inline=True, fontsize=10)

    plt.xticks(())
    plt.yticks(())
    # 绘制等高线数据
    plt.show()

2.7. 3D立体图的画法

代码语言:javascript
复制
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D

def d3Picture():
    '''
    3D图形绘制
    '''

    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轴的高度
    Z = np.sin(R)

    fig = plt.figure()
    # 将figure变为3d
    ax = Axes3D(fig)  # type:mpl_toolkits.mplot3d.Axes3D

    # 绘制3D曲面
    ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=plt.get_cmap('rainbow'))
    # 绘制从3D曲面到底部的投影
    ax.contour(X, Y, Z, zdim='z', offset=-2, cmap='rainbow')
    # 设置z轴的维度
    ax.set_zlim(-2, 2)

    plt.show()

2.8. figure的使用

代码语言:javascript
复制
import matplotlib.pyplot as plt
import numpy as np

def figureUse():
    '''
    figure的使用
    '''
    x = np.linspace(-1, 1, 50)
    y1 = 2 * x * 1
    y2 = x ** 2

    plt.figure()
    plt.plot(x, y1)

    # 将会创建另外一个figure来显示图片
    plt.figure()
    plt.plot(x, y2)

    plt.show()

2.9. subplot绘制子图

代码语言:javascript
复制
import matplotlib.pyplot as plt

def subplotUse1():
    '''
    subplot在一个figure中绘制多个子图
    '''

    plt.figure()
    # 绘制第一个子图
    plt.subplot(2, 2, 1)
    plt.plot([0, 1], [0, 1])
    # 绘制第二个子图
    plt.subplot(2, 2, 2)
    plt.plot([0, 1], [0, 1])
    # 绘制第三个子图
    plt.subplot(2, 2, 3)
    plt.plot([0, 1], [0, 1])
    # 绘制第四个子图
    plt.subplot(2, 2, 4)
    plt.plot([0, 1], [0, 1])
    plt.show()


def subplotUse2():
    '''
    subplot在一个figure中绘制多个子图
    '''

    plt.figure()
    # 绘制第一个子图
    plt.subplot(2, 1, 1)
    plt.plot([0, 1], [0, 1])
    # 绘制第二个子图
    plt.subplot(2, 3, 4)
    plt.plot([0, 1], [0, 1])
    # 绘制第三个子图
    plt.subplot(2, 3, 5)
    plt.plot([0, 1], [0, 1])
    # 绘制第四个子图
    plt.subplot(2, 3, 6)
    plt.plot([0, 1], [0, 1])
    plt.show()

2.10. figure绘制子图

代码语言:javascript
复制
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.gridspec as gridspec

def duoTuUse1():
    '''
    figure绘制多个子图,采用subplot2grid
    '''

    plt.figure()
    # figure分成3行3列,取得第一个子图的句柄,
    # 第一个子图跨度为1行3列,起点是表格(0, 0)
    ax1 = plt.subplot2grid((3, 3), (0, 0), colspan=3, rowspan=1)
    ax1.plot([0, 1], [0, 1])
    ax1.set_title('Test')

    ax2 = plt.subplot2grid((3, 3), (1, 0), colspan=2, rowspan=1)
    ax2.plot([0, 1], [0, 1])

    ax3 = plt.subplot2grid((3, 3), (1, 2), colspan=1, rowspan=1)
    ax3.plot([0, 1], [0, 1])

    ax4 = plt.subplot2grid((3, 3), (2, 0), colspan=3, rowspan=1)
    ax4.plot([0, 1], [0, 1])

    plt.show()


def duoTuUse2():
    '''
    figure绘制多图,gridspec
    '''

    plt.figure()
    # 分割figure
    gs = gridspec.GridSpec(3, 3)
    ax1 = plt.subplot(gs[0, :])
    ax2 = plt.subplot(gs[1, 0:2])
    ax3 = plt.subplot(gs[1, 2])
    ax4 = plt.subplot(gs[2, :])

    ax1.plot([0, 1], [0, 1])
    ax1.set_title('Test')
    ax2.plot([0, 1], [0, 1])
    ax3.plot([0, 1], [0, 1])
    ax4.plot([0, 1], [0, 1])

    plt.show()

2.11. figure图的嵌套

代码语言:javascript
复制
import matplotlib.pyplot as plt
import numpy as np

def inFigure():
    '''
    figure图的嵌套
    '''

    fig = plt.figure()
    x = [1, 2, 3, 4, 5, 6, 7]
    y = [1, 3, 4, 2, 5, 8, 6]

    # figure的位置,left和bottom指定了图真正开始的位置,从figure 10%的位置开始
    # width和height指定的是图真正的大小,是figure的80%
    left, bottom, width, height = 0.1, 0.1, 0.8, 0.8
    # 获得绘制的句柄
    ax1 = fig.add_axes([left, bottom, width, height])
    # 绘制点
    ax1.plot(x, y, 'r')
    ax1.set_xlabel('x')
    ax1.set_ylabel('y')
    ax1.set_title('test')

    # 嵌套方法一
    left, bottom, width, height = 0.2, 0.6, 0.25, 0.25
    ax2 = fig.add_axes([left, bottom, width, height])
    ax2.plot(x, y, 'r')
    ax2.set_xlabel('x')
    ax2.set_ylabel('y')
    ax2.set_title('part1')

    # 嵌套方法二
    plt.axes([0.6, 0.2, 0.25, 0.25])
    plt.plot(x, y, 'r')
    plt.xlabel('x')
    plt.ylabel('y')
    plt.title('part2')

    plt.show()

2.12. 坐标轴的相关操作

代码语言:javascript
复制
import matplotlib.pyplot as plt
import numpy as np

def axisUse():
    '''
    坐标轴的相关操作
    '''

    x = np.linspace(-1, 1, 50)
    y1 = x * 2 + 1
    y2 = x ** 2

    plt.figure()
    plt.plot(x, y1)
    plt.plot(x, y2, 'red', lw=1.0, ls='--')

    # 设置坐标轴的取值范围
    plt.xlim((-1, 1))
    plt.ylim((0, 3))

    # 设置坐标轴的lable
    # 标签里面必须添加字体变量:fontproperties='SimHei',fontsize=14。不然可能会乱码
    plt.xlabel('这是x轴', fontproperties='SimHei', fontsize=14)
    plt.ylabel('这是y轴', fontproperties='SimHei', fontsize=14)

    # 设置x坐标轴刻度, 之前为0.25, 修改后为0.5
    # 也就是在坐标轴上取5个点,x轴的范围为-1到1所以取5个点之后刻度就变为0.5了
    plt.xticks(np.linspace(-1, 1, 5))
    # 获取当前的坐标轴
    ax = plt.gca()
    # 设置右边框和上边框
    ax.spines['right'].set_color('none')
    ax.spines['top'].set_color('none')
    # 设置x坐标轴为下边框
    ax.xaxis.set_ticks_position('bottom')
    # 设置y坐标轴为左边框
    ax.yaxis.set_ticks_position('left')
    # 设置x轴,y轴在(0, 0)的位置
    ax.spines['bottom'].set_position(('data', 0))
    ax.spines['left'].set_position(('data', 0))
    for label in ax.get_xticklabels() + ax.get_yticklabels():
        label.set_fontsize(12)
        label.set_bbox(dict(facecolor='g', edgecolor='None', alpha=0.7))
    plt.show()

2.13. 主次坐标轴

代码语言:javascript
复制
import matplotlib.pyplot as plt
import numpy as np

def zhuciaxis():
    '''
    主次坐标轴
    '''

    x = np.arange(0, 10, 0.1)
    y1 = 0.05 * x ** 2
    y2 = -1 * y1

    # 定义figure
    fig, ax1 = plt.subplots()
    # 得到ax1的对称轴ax2
    ax2 = ax1.twinx()
    # 绘制图像
    ax1.plot(x, y1, 'g-')
    ax2.plot(x, y2, 'b--')
    # 设置label
    ax1.set_xlabel('X data')
    ax1.set_ylabel('Y1', color='g')
    ax2.set_ylabel('Y2', color='b')

    plt.show()

2.14. 注解的使用

代码语言:javascript
复制
import matplotlib.pyplot as plt
import numpy as np

def zhujie():
    '''
    注解的使用
    '''

    x = np.linspace(-3, 3, 50)
    y = 2 * x + 1
    plt.figure()
    plt.plot(x, y)

    ax = plt.gca()
    ax.spines['right'].set_color('none')
    ax.spines['top'].set_color('none')
    ax.xaxis.set_ticks_position('bottom')
    ax.yaxis.set_ticks_position('left')

    ax.spines['bottom'].set_position(('data', 0))
    ax.spines['left'].set_position(('data', 0))

    # 定义(x0, y0)点
    x0 = 1
    y0 = 2 * x0 + 1
    # 绘制(x0, y0)点
    plt.scatter(x0, y0, s=50, color='blue')
    # 绘制垂线
    plt.plot([x0, x0], [y0, 0], 'k--', lw=2.5)
    # 注解形式一
    plt.annotate('$2 * x + 1 = %s$' % y0, xy=(x0, y0), xycoords='data', xytext=(+30, -30),
                 textcoords='offset points', fontsize=16,
                 arrowprops=dict(arrowstyle='->', connectionstyle='arc3, rad=.2'))
    # 注解形式二
    plt.text(-3, 3, r'$Test\ text. \mu \sigma_i, \alpha_i$', fontdict={'size': 16, 'color': 'red'})
    plt.show()

2.15. Image的绘制

代码语言:javascript
复制
import matplotlib.pyplot as plt
import numpy as np

def imgPaint():
    '''
    Image绘制
    '''
    # 定义图像数据
    a = np.linspace(0, 1, 9).reshape(3, 3)
    # 显示图像数据
    plt.imshow(a, interpolation='nearest', cmap='bone', origin='lower')
    # 添加颜色条
    plt.colorbar()
    # 去掉坐标轴
    plt.xticks(())
    plt.yticks(())
    plt.show()
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 多选参数 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.2. Marker的值
  • 1.3. LineStyles的值
  • 2. 示例
    • 2.1. 简单的plot()方法使用
      • 2.2. 函数的画法
        • 2.3. 柱状图的画法
          • 2.4. 直方图的画法
            • 2.5. 散点图
              • 2.6. 等高线
                • 2.7. 3D立体图的画法
                  • 2.8. figure的使用
                    • 2.9. subplot绘制子图
                      • 2.10. figure绘制子图
                        • 2.11. figure图的嵌套
                          • 2.12. 坐标轴的相关操作
                            • 2.13. 主次坐标轴
                              • 2.14. 注解的使用
                                • 2.15. Image的绘制
                                领券
                                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档