numpy与Matplotlib一:基本窗口界面

matploblib基本界面设置

数据分析第一部分,以前学过部分matlab,所以现在重新学还是比较有感觉。numpy的知识就先不讲了。

窗口操作

矩阵式布局

mp.subplot(行数, 列数, 序号):创建一个矩阵,每一个位置都可以显示一个数据。
例:
1 2 3
4 5 6
7 8 9
mp.subplot(3, 3, 5)
mp.subplot(335)

from __future__ import unicode_literals
import matplotlib.pyplot as mp
mp.figure('Subplot', facecolor='lightgray')#创建一个窗口
mp.subplot(221)#两行两列
mp.xticks(())#取消坐标的时候用空()
mp.yticks(())
mp.text(0.5, 0.5, '1', ha='center', va='center',
        size=36, alpha=0.5)#alpha:设置透明度
mp.subplot(222)
mp.xticks(())
mp.yticks(())
mp.text(0.5, 0.5, '2', ha='center', va='center',
        size=36, alpha=0.5)
mp.subplot(223)
mp.xticks(())
mp.yticks(())
mp.text(0.5, 0.5, '3', ha='center', va='center',
        size=36, alpha=0.5)
mp.subplot(224)
mp.xticks(())
mp.yticks(())
mp.text(0.5, 0.5, '4', ha='center', va='center',
        size=36, alpha=0.5)
mp.tight_layout()#紧凑格式
mp.show()

在这里插入图片描述

栅格布局

import matplotlib.gridspec as mg
gs = mg.GridSpec(行数, 列数)
mp.subplot(gs[占行, 占列])

例子:

import matplotlib.pyplot as mp
import matplotlib.gridspec as mg
mp.figure("test1",facecolor="lightgray")
gs=mg.GridSpec(3,3)
mp.subplot(gs[0,:2])
mp.xticks(())
mp.yticks(())
mp.text(0.5,0.5,'1',ha='center',va='center',size=36,alpha=0.5)
mp.subplot(gs[0:2,2])
mp.xticks(())
mp.yticks(())
mp.text(0.5,0.5,'2',ha='center',va='center',size=36,alpha=0.5)
mp.subplot(gs[2,1:3])
mp.xticks(())
mp.yticks(())
mp.text(0.5,0.5,'3',ha='center',va='center',size=36,alpha=0.5)
mp.subplot(gs[1:3,0])
mp.xticks(())
mp.yticks(())
mp.text(0.5,0.5,'4',ha='center',va='center',size=36,alpha=0.5)
mp.subplot(gs[1,1])
mp.xticks(())
mp.yticks(())
mp.text(0.5,0.5,'5',ha='center',va='center',size=36,alpha=0.5)
mp.tight_layout()
mp.show()

在这里插入图片描述

自由布局

mp.axes([坐标x, 坐标y,,])#窗口的坐标原点为左下点,坐标和长度均在0-1范围,为比例值

例:

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import matplotlib.pyplot as mp
mp.figure('Axes', facecolor='lightgray')
mp.axes([0.03, 0.038, 0.94, 0.924])
mp.xticks(())
mp.yticks(())
mp.text(0.5, 0.5, '1', ha='center', va='center',
        size=36, alpha=0.5)
mp.axes([0.63, 0.076, 0.31, 0.308])
mp.xticks(())
mp.yticks(())
mp.text(0.5, 0.5, '2', ha='center', va='center',
        size=36, alpha=0.5)
mp.show()

在这里插入图片描述

刻度定位器及坐标系

刻度定位器:

import numpy as np
import matplotlib.pyplot as mp
# 创建图形窗口
mp.figure('Locator')
# 刻度定位器列表
locators = [
    # 空定位器:不绘制刻度
    'mp.NullLocator()',
    # 最大值定位器:最多绘制nbins个刻度,
    # 每两个刻度之间的间隔从steps列表中选择,
    'mp.MaxNLocator(nbins=3, steps=[1, 3, 5, 7, 9])',
    # 定点定位器:根据locs参数中的位置绘制刻度
    'mp.FixedLocator(locs=[0, 2.5, 5, 7.5, 10])',
    # 自动定位器:由系统自动选择刻度的绘制位置
    'mp.AutoLocator()',
    # 索引定位器:由offset确定起始刻
    # 度,由base确定相邻刻度的间隔
    'mp.IndexLocator(offset=0.5, base=1.5)',
    # 多点定位器:从0开始,按照参
    # 数指定的间隔(缺省1)绘制刻度
    'mp.MultipleLocator()',
    # 线性定位器:等分numticks-1
    # 份,绘制numticks个刻度
    'mp.LinearLocator(numticks=21)',
    # 对数定位器:以base为底,用subs
    # 中的元素作为指数增量,绘制刻度
    'mp.LogLocator(base=2, subs=[1.0])']
# 刻度定位器数
n_locators = len(locators)
# 遍历刻度定位器列表
for i, locator in enumerate(locators):
        # 为每个刻度定位器创建一个子图
    mp.subplot(n_locators, 1, i + 1)
    # 设置坐标范围
    mp.xlim(0, 10)
    mp.ylim(-1, 1)
    # 关闭垂直坐标轴刻度
    mp.yticks(())
    # 获取当前坐标轴
    ax = mp.gca()
    # 隐藏除底轴以外的所有坐标轴
    ax.spines['left'].set_color('none')
    ax.spines['top'].set_color('none')
    ax.spines['right'].set_color('none')
    # 将底坐标轴调整到子图中心位置
    ax.spines['bottom'].set_position(('data', 0))
    # 设置水平坐标轴的主刻度定位器
    ax.xaxis.set_major_locator(eval(locator))
    # 设置水平坐标轴的次刻度定位器为多点定位器,间隔0.1
    ax.xaxis.set_minor_locator(mp.MultipleLocator(0.1))
    # 绘制一条与水平坐标轴重合的直线,无色透明
    mp.plot(np.arange(11), np.zeros(11), c='none')
    # 标记所用刻度定位器类名
    mp.text(5, 0.3, locator[3:], ha='center',
            size=12)
# 紧凑布局
mp.tight_layout()
# 显示图形
mp.show()

在这里插入图片描述

刻度网格线

ax = mp.gca()
ax.grid(which=‘major’/‘minor’, axis=‘x’/‘y’/‘both’, linewidth=线宽, linestyle=线型, color=颜色,alpha=透明度)
major:主网格线(相当于整数线)
minor:副网格线(相当于小数线,需要设置才能显示,设置在例子里面)
例:

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import numpy as np
import matplotlib.pyplot as mp
x = np.linspace(-5, 5, 1000)
y = 8 * np.sinc(x)
mp.figure('Grid', facecolor='lightgray')
mp.title('Grid', fontsize=20)
mp.xlabel('x', fontsize=14)
mp.ylabel('y', fontsize=14)
ax = mp.gca()
ax.xaxis.set_major_locator(mp.MultipleLocator(1.0))#设置x轴主刻度线
ax.xaxis.set_minor_locator(mp.MultipleLocator(0.1))#设置x轴副刻度线
ax.yaxis.set_major_locator(mp.MultipleLocator(1.0))#设置y轴主刻度线
ax.yaxis.set_minor_locator(mp.MultipleLocator(0.1))#设置y轴副刻度线
#设置坐标标签字符的大小
mp.tick_params(labelsize=10)
#设置主网格
ax.grid(which='major', axis='both', linewidth=0.75,
        linestyle='-', color='orange')
#设置副网格
ax.grid(which='minor', axis='both', linewidth=0.25,
        linestyle='-', color='orange')
#画图
mp.plot(x, y, c='dodgerblue', label=r'$y=8sinc(x)$')
mp.legend()
mp.show()

图示:
在这里插入图片描述

半对数坐标系

半对数坐标,是指在y轴设置对数刻度,
全对数坐标是指x、y轴均设置对数刻度,
mp.semilogy(参数同plot函数)(x轴坐标系,y轴坐标系, linestyle=线型, linewidth=线宽, color=颜色, …)
例:

import numpy as np
import matplotlib.pyplot as mp
y = np.array([1, 10, 100, 1000, 100, 10, 1])
mp.figure('Normal & Log', facecolor='lightgray')
mp.subplot(211)
mp.title('Normal', fontsize=20)
mp.ylabel('y', fontsize=14)
ax = mp.gca()
ax.xaxis.set_major_locator(mp.MultipleLocator(1.0))
ax.xaxis.set_minor_locator(mp.MultipleLocator(0.1))
ax.yaxis.set_major_locator(mp.MultipleLocator(250))
ax.yaxis.set_minor_locator(mp.MultipleLocator(50))
mp.tick_params(labelsize=10)
ax.grid(which='major', axis='both', linewidth=0.75,
        linestyle='-', color='orange')
ax.grid(which='minor', axis='both', linewidth=0.25,
        linestyle='-', color='orange')
mp.plot(y, 'o-', c='dodgerblue', label='plot')
mp.legend()
mp.subplot(212)
mp.title('Log', fontsize=20)
mp.xlabel('x', fontsize=14)
mp.ylabel('y', fontsize=14)
ax = mp.gca()
ax.xaxis.set_major_locator(mp.MultipleLocator(1.0))
ax.xaxis.set_minor_locator(mp.MultipleLocator(0.1))
mp.tick_params(labelsize=10)
ax.grid(which='major', axis='both', linewidth=0.75,
        linestyle='-', color='orange')
ax.grid(which='minor', axis='both', linewidth=0.25,
        linestyle='-', color='orange')
#注意:c应该是color,‘0-’为线型,o为点型,-为用线连接点
#此处为semillogy,是单指y轴,
mp.semilogy(y, 'o-', c='red', label='semilogy')#具体使用方法使用时参考手册
mp.legend()
mp.tight_layout()
mp.show()

在这里插入图片描述

极坐标系

mp.gca(projection=‘polar’)
水平坐标 -> 极角
垂直坐标 -> 极径
mp.plot(水平坐标, 垂直坐标, …)
mp.plot(极角, 极径, …)

import numpy as np
import matplotlib.pyplot as mp
t = np.linspace(0, 2 * np.pi, 1001)
r_spiral = 0.8 * t  # 阿基米德螺旋线
r_rose = 5 * np.sin(6 * t)  # 六元玫瑰线
mp.figure('Polar', facecolor='lightgray')
mp.gca(projection='polar')  # 设置极坐标系
mp.title('Polar', fontsize=20)
mp.xlabel(r'$\theta$', fontsize=14)
mp.ylabel(r'$\rho$', fontsize=14)
mp.tick_params(labelsize=10)
mp.grid(linestyle=':')
# 函数值   = f (自变量)
# 垂直坐标 = f (水平坐标)
# 极径     = f (极角)
mp.plot(t, r_spiral, c='dodgerblue',
        label=r'$\rho=0.8\theta$')
mp.plot(t, r_rose, c='orangered',
        label=r'$\rho=5sin(6\theta)$')
mp.legend()
mp.show()

在这里插入图片描述

三维直角坐标系

ax.scatter(x坐标,y坐标,z坐标,)
#三维坐标系的导入
from mpl_toolkits.mplot3d import axes3d

class axes3d

ax = mp.gca(projection=‘3d’)
ax.set_xlabel(…)

ax.plot_surface(x, y, z, rstride=行跨距, cstride=列跨距,
cmap=颜色映射)
ax.plot_wireframe(x, y, z, rstride=行跨距, cstride=列跨距,
linewidth=线宽, color=颜色)

填充

mp.fill_between(
边界曲线上点的水平坐标,
下边界曲线上点的垂直坐标,
上边界曲线上点的垂直坐标,
填充条件, color=颜色, alpha=透明度)

import matplotlib.pyplot as mp
import numpy as np
n=1000
x=np.linspace(-np.pi,np.pi,n)
sin_y=np.sin(x)
cos_y=np.cos(x)
mp.figure('mp1')
mp.title("test")
mp.plot(x,sin_y)
mp.plot(x,cos_y)
mp.fill_between(x,sin_y,cos_y,color='red',alpha=0.5)
ax=mp.gca()
locators=    'mp.MultipleLocator(0.5)'
mp.ylim=(-1,1)
ax.spines['left'].set_position(('data', 0))
ax.spines['bottom'].set_position(('data', 0))
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.yaxis.set_major_locator(eval(locators))
mp.show()

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_36179862/article/details/84788818