请 [注册] 或 [登录]  | 返回主站

量化交易吧 /  源码分享 帖子:3353084 新帖:44

matplotlib画图之多图组合布局

耶伦发表于:5 月 9 日 19:36回复(1)

matplotlib画图之多图组合布局

import numpy as np
from matplotlib import pyplot as plt
fig = plt.figure(figsize=(20, 10))

ax1 = plt.subplot2grid((3,3), (0,0), colspan=3)
ax1.text(0.2,0.2,"ax1")

ax2 = plt.subplot2grid((3,3), (1,0), colspan=2)
ax2.text(0.2,0.2,"ax2")

ax3 = plt.subplot2grid((3,3), (1, 2), rowspan=2)
ax3.text(0.2,0.2,"ax3")

ax4 = plt.subplot2grid((3,3), (2, 0))
ax4.text(0.2,0.2,"ax4")

ax5 = plt.subplot2grid((3,3), (2, 1))
ax5.text(0.2,0.2,"ax5")


plt.suptitle("subplot2grid")
<matplotlib.text.Text at 0x7f748a5aa1d0>
#subplot2grid绘图

T = np.linspace(-np.pi, np.pi, 1024)
fig = plt.figure(figsize=(20, 10))

grid_size = (6, 2)

#左上
plt.subplot2grid(grid_size, (0, 0), rowspan = 3, colspan = 1)
plt.plot(np.sin(2 * T), np.cos(0.5 * T), c = 'k')

#右上
plt.subplot2grid(grid_size, (0, 1), rowspan = 3, colspan = 1)
plt.plot(np.cos(3 * T), np.sin(T), c = 'k')

#下部
plt.subplot2grid(grid_size, (3, 0), rowspan=3, colspan=3)
plt.plot(np.cos(5 * T), np.sin(7 * T), c= 'k')

plt.tight_layout()

plt.show()
#subplot2grid
def get_radius(T, params):
     m, n_1, n_2, n_3 = params
     U = (m * T) / 4
     return (np.fabs(np.cos(U)) ** n_2 + np.fabs(np.sin(U)) ** n_3) **(-1. / n_1)
    
fig = plt.figure(figsize=(20, 10))
grid_size = (3, 4)

T = np.linspace(0, 2 * np.pi, 1024)

for i in range(grid_size[0]):
 for j in range(grid_size[1]):
    
   params = np.random.random_integers(1, 20, size = 4)

   R = get_radius(T, params)
    
   axes = plt.subplot2grid(grid_size, (i, j), rowspan=1, colspan=1)

   axes.get_xaxis().set_visible(False)
   axes.get_yaxis().set_visible(False)

   plt.plot(R * np.cos(T), R * np.sin(T), c = 'k')
    
   plt.title('%d, %d, %d, %d' % tuple(params), fontsize = 'small')

plt.tight_layout()
plt.show()
#subplots, figsize设定

T = np.linspace(-np.pi, np.pi, 1024)

fig, (ax0, ax1) = plt.subplots(ncols =2,figsize=(15,15))

ax0.plot(np.sin(2 * T), np.cos(0.5 * T), c = 'k')
ax1.plot(np.cos(3 * T), np.sin(T), c = 'k')

plt.show()
#使用相同的刻度set_aspect

T = np.linspace(0, 2 * np.pi, 1024)

plt.figure(figsize=(20, 10))

plt.plot(2. * np.cos(T), np.sin(T), c = 'k', lw = 3.)

plt.axes().set_aspect('equal')

plt.show()
fig = plt.figure(figsize=(20, 10))

X = np.linspace(-6, 6, 1024)
plt.ylim(-.5, 1.5)
plt.plot(X, np.sinc(X), c = 'k')
plt.show()
X = np.linspace(-6, 6, 1024)
Y1, Y2 = np.sinc(X), np.cos(X)

plt.figure(figsize=(10.24, 2.56))

plt.plot(X, Y1, c='k', lw = 3.)
plt.plot(X, Y2, c='.75', lw = 3.)
plt.show()
# 详细图
X = np.linspace(-6, 6, 1024)
Y = np.sinc(X)

X_detail = np.linspace(-3, 3, 1024)
Y_detail = np.sinc(X_detail)

plt.plot(X, Y, c = 'k')

#通过axes
sub_axes = plt.axes([.6, .6, .25, .25])
sub_axes.plot(X_detail, Y_detail, c = 'k')

#ss=plt.setp(sub_axes)

plt.show()
#plt直接绘图

plt.rcParams['font.sans-serif'] = ['SimHei']  # 中文字体设置-黑体
plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题

x = np.arange(-2*np.pi, 2*np.pi, 0.01)
y1 = np.sin(x)
y2 = np.cos(x)

plt.figure(figsize=(20, 10))

# label位置
plt.plot(x, y1, label='$sinx$')
plt.plot(x, y2, label='$cosx$')
plt.legend(loc='upper right')

#X轴范围
plt.xlim(-2*np.pi-1, 2*np.pi+3)

#刻度
plt.xticks([-2*np.pi, -np.pi, 0, np.pi, 2*np.pi], ['$-2\pi$', '$-\pi$', '$0$', '$\pi$', '$2\pi$'])

plt.title('三角-函数')
plt.xlabel('横坐标')
plt.ylabel('纵坐标')

#画X0、Y0轴
#plt.axhline(y=0, c='black')
# draw a thick red hline at y=0 that spans the xrange
plt.axhline(linewidth=4, color='r')
plt.axvline(linewidth=4, color='r')

plt.show()
#AXES绘图, figsize

plt.rcParams['font.sans-serif'] = ['SimHei']  # 中文字体设置-黑体
plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题

x = np.arange(-2*np.pi, 2*np.pi, 0.01)

y1 = np.sin(x)
y2 = np.cos(x)

#通过subplots返回figure和axes
fig, ax = plt.subplots(figsize=(20, 7))

ax.plot(x, y1, label='$sinx$')
ax.plot(x, y2, label='$cosx$')

ax.legend(loc='upper right')

ax.set_xlim(-2 * np.pi - 1, 2 * np.pi + 3)
ax.set_xticks([-2 * np.pi, -np.pi, 0, np.pi, 2 * np.pi])
ax.set_xticklabels(['$-2\pi$', '$-\pi$', '$0$', '$\pi$', '$2\pi$'])

ax.set_title('三角-函数')
ax.set_xlabel('横坐标')
ax.set_ylabel('纵坐标')

ax.axhline(y=0, c='black')

plt.show()
 

全部回复

0/140

达人推荐

量化课程

    移动端课程