【学习笔记】python数据可视化之matplotlib实践第七章

共享绘图区域的坐标轴

(1)共享单一绘图区域的坐标轴 

import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mpl

mpl.rcParams['font.sans-serif'] = ['LiSu']
mpl.rcParams['axes.unicode_minus'] = False

x = np.arange(0.05,10.0,0.01)
y = np.exp(x)

fig,ax1 = plt.subplots()
ax1.plot(x,y,ls = '--',lw = 2,color = 'b')
ax1.set_xlabel('x坐标轴')
ax1.set_ylabel('以e为底指数函数',color = 'b')
ax1.tick_params('y',colors = 'b')

ax2 = ax1.twinx()
y2 = np.cos(x**2)
ax2.plot(x,y2,ls = '-',color = 'r')
ax2.set_ylabel('余弦函数',color = 'r')
ax2.tick_params('y',colors = 'r')

plt.show()

代码说明:1.使用tick_params()设置主刻度线和刻度标签

2.调用ax1.twinx()生成实例ax2,此时实例ax2的x轴与实例ax1的x轴是共享的,实例ax2的刻度线和刻度标签在右侧轴处绘制

运行结果: 

(2)共享不同子区绘图区域的坐标轴

 调用subplots()中的参数sharey(或是sharex)来实现共享不同子区绘图区域的坐标轴

sharex和sharey的取值形式有四种:row,col,all,none

1.sharex(sharey)不同参数下的图形

以下是为设置sharex(sharey)参数的情况: 

import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mpl

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)
ax2 = ax[0,1]
ax2.plot(x2,y2)
ax3 = ax[1,0]
ax3.scatter(x3,y3)
ax4 = ax[1,1]
ax4.scatter(x4,y4)

plt.show()

运行结果: 

情形1:sharex = 'all'

我们只需要将plt.subplots(2,2)改成plt.subplots(2,2,sharex = 'all'),其他语句都不需要变化

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

运行结果: 

对比设置参数和没有设置参数的图形知:4幅图形的x轴取值范围使用了相同的范围,而且采用了x2取值范围作为x轴的共享范围,变量x2的取值范围的最大值是其他变量取值范围上限里的最大值

情形2:sharex = 'none'

这种情况就是plt.subplots(2,2)

fig,ax = plt.subplots(2,2,sharex = 'none')

                                                                        运行结果: 

情形3:sharex = 'row'

fig,ax = plt.subplots(2,2,sharex = 'row')

运行结果: 

这种情况是把子区的每一行的图形的x轴取值范围实现共享,而且是选择每一行中图形的x轴取值范围上限最大的那个取值范围作为共享范围

情形4:sharex = 'col'

fig,ax = plt.subplots(2,2,sharex = 'col')

运行结果: 

这种情况是把子区的每一列的图形的x轴取值范围实现共享,而且是选择每一列中图形的x轴取值范围上限最大的那个取值范围作为共享范围 

当然参数sharex和参数sharey可以同时使用

2.将共享坐标轴的子区之间的空隙去掉

import matplotlib.pyplot as plt
import numpy as np

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,(ax1,ax2,ax3,ax4) = plt.subplots(4,1,sharex = 'all')
fig.subplots_adjust(hspace=0)
ax1.plot(x1,y1)
ax2.plot(x2,y2)
ax3.scatter(x3,y3)
ax4.scatter(x4,y4)

plt.show()

代码说明: 1.plt.subplots(4,1,sharex = 'all')实现共享x轴的坐标轴刻度标签

2.fig.subplots_adjust(hspace=0)实现将4幅子图的水平方向的空隙去除

运行结果: 

(3)共享个别子区绘图区域的坐标轴 

1.个别子区共享绘图区域的坐标轴

import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mpl

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 = plt.subplot(221)
ax1.plot(x1,y1)
ax2 = plt.subplot(222)
ax2.plot(x2,y2)
ax3 = plt.subplot(223)
ax3.scatter(x3,y3)

ax4 = plt.subplot(224,sharex = ax1)
ax4.scatter(x4,y4)
plt.show()

代码说明: 通过ax4 = plt.subplot(224,sharex = ax1)可以让子区4的x轴范围和子区1的x轴范围共享

运行结果: 

2.用函数plt.autoscale()调整坐标轴范围

如果我们对某个子区的坐标轴范围和数据范围的搭配比例不满意,可以使用autoscale()进行坐标轴范围的自适应调整。调用签名是:autoscale(enable = True,axis = 'both',tight = True)

enable进行坐标轴范围的自适应调整
axis使x,y轴都进行自适应调整
tight让坐标轴的范围调整到数据的范围上

 

 

 

在上面代码的基础上,对ax2进行自适应调整代码如下: 

ax2.autoscale(enable = True,axis = 'both',tight = True)

运行结果: 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值