matplotlib共享绘图区域坐标轴(移动坐标轴)


1.一个区域,左右两边都有纵坐标

在这里插入图片描述

import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False

fig, ax1 = plt.subplots()
t = np.arange(0.05, 10.0, 0.01)
s1 = np.exp(t)
ax1.plot(t, s1, c='b', ls='-')
ax1.set_xlabel('x坐标轴')
ax1.set_ylabel('以e为底指数函数', c='b')
ax1.tick_params('y', colors='b')

ax2 = ax1.twinx()
s2 = np.cos(t**2)
ax2.plot(t, s2, c='r', ls=':')
ax2.set_ylabel("余弦函数", c='r')
ax2.tick_params('y', colors='r')

plt.show()

使用ax1.set_ylabel()和ax1.tick_params()实例方法将y轴标签、主刻度线和刻度标签都设置成蓝色。调用实例方法ax1.twinx()生成实例ax2,此时实例ax2的x轴与实例ax1的x轴是共享的,实例ax2的刻度线和刻度标签在右侧轴脊处绘制。

2.在子区域里共享坐标轴

调用签名使用“subplots( 1,2,sharey=True)“的形式,其中参数sharey表示子区1和子区2共享y坐标轴。相对应的,还可以设置参数sharex的取值形式。具体而言,参数sharex和参数sharey的取值形式有四种,分别是row、col、all和none, 其中all和none分别等同于“True” 和“False”。 下面我们参数sharey的取值形式与使用方法和参数sharex完全相同,不赘述。
先放一张原始的图:
在这里插入图片描述

import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False

x1 = np.linspace(0, 2*np.pi, 400)
y1 = np.cos(x1**2)
x2 = np.linspace(0.01, 10, 100)
y2 = np.sin(x2)
x3 = np.random.rand(100)
y3 = np.linspace(0, 3, 100)
x4 = np.arange(0,  6, 0.5)
y4 = np.power(x4, 3)

fig, ax = plt.subplots(2, 2)
ax1 = ax[0, 0]
ax1.plot(x1, y1)
ax1 = ax[0, 1]
ax1.plot(x2, y2)
ax1 = ax[1, 0]
ax1.scatter(x3, y3)
ax1 = ax[1, 1]
ax1.scatter(x4, y4)

plt.show()

plt.subplots(2, 2)加上sharex=‘all‘的效果,会让横坐标变得统一。而且横坐标是取子区域里最大的那个。

plt.subplots(2, 2,sharex='all')

在这里插入图片描述

plt.subplots(2, 2,sharex='col')   # 每一列都以这一列里的取值范围上线为共享范围,如下图
plt.subplots(2, 2,sharex='row')   # 每一行都以这一行里的取值范围上线为共享范围,就不放图了 

在这里插入图片描述
当然还可以有办法把子图间的空隙去掉,plt.subplots_adjust(hspace=0)就是去除水平方向空隙。(代码放在设置共享坐标的下面)
在这里插入图片描述

3.移动坐标轴的

import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False

x = np.linspace(-2*np.pi, 2*np.pi, 200)
y = np.sin(x)
y2 = np.cos(x)
ax = plt.subplot(111)
plt.plot(x, y, ls='-', lw=2, label='$sin(x)$')
plt.plot(x, y2, ls='-', lw=2, label='$cos(x)$')
plt.legend(loc='lower left')
plt.xlim(-2*np.pi, 2*np.pi)
plt.xticks([-2*np.pi, -3*np.pi/2, -1*np.pi, -1*np.pi/2, 0, np.pi/2, np.pi, 3*np.pi/2, 2*np.pi],
           [r"$-2\pi$", r"$-3\pi/2$", r"$-\pi$", r"$-2\pi/2$", r"$0$", r"$pi/2$", r"$\pi$", r"$3\pi/2$", r"$2\pi$"])
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.spines['bottom'].set_position(('data', 0))
ax.spines['left'].set_position(('data', 0))
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
plt.show()

在这里插入图片描述

代码主体部分,我们主要调用前面章节的代码内容,在此基础上,我们添加了两条关键代码:
①ax.spines[‘bottom’].set_position((‘data’, 0))
②ax.spines[‘left’].set_position((‘data’, 0))
ax.spines会调用轴脊字典,其中的键是轴脊位置,如"top““right”“bottom"“left"键值是matplotlib.spines.Spine对象,实例方法set position()就是对轴脊位置的控制方法,其中参数“data"
说明控制轴脊位置的坐标值与折线图的坐标系统一致。 因此,参数0就表示将底端轴脊移动到左侧轴脊的零点处。同理,将左侧轴脊移动到底端轴脊的零点处。在matplotib元素组成结构中,已经说明轴脊是刻度线和刻度标签的载体。这样,当左侧和底端轴脊移动位置时,刻度线和刻度标签也会相应的移动位置。我们将x轴刻度线放在底端轴脊上,将y轴刻度线放在左侧轴脊上。从而,完成移动坐标轴位置的工作。


参考书目《Python数据可视化之matplotlib实践》。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值