Python-matplotlib制图08-在特定位置添加新的x轴和y轴

锻炼好自己的身心素质,然后拼了命做好自己要做的事情。

目录

前言 1. 概述 2. 版本 2.1 山东青岛,2021年5月13日,Version 1

3. 参考资料

一、axes.spines['bottom'].set_position(('data',num))二、SubplotZero

前言

1. 概述

(1) 添加新的x轴和y轴 (2) 建立直角坐标系

2. 版本

2.1 山东青岛,2021年5月13日,Version 1

3. 参考资料

[1]. matplotlib官方文档 [2]. matplotlib—画正弦、余弦函数图

一、axes.spines[‘bottom’].set_position((‘data’,num))

对axes的spines对象利用set_position()进行坐标轴位置的修改代码示例(请着重关注程序的2.4部分和2.7部分)

'''

1. 程序目的

(1) 在特定位置添加坐标轴

2. 山东青岛 2021年5月13日 Version 1

'''

# 1. 基础包的导入

import numpy as np

import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif']=['SimHei'] # 用来正常显示中文标签

plt.rcParams['axes.unicode_minus']=False # 用来正常显示负号

# 2. 制图

# 2.1 制图数据

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

y = np.sin(x)

# 2.2 创建制图对象

fig, ax = plt.subplots(figsize=(5,3),dpi=600)

# 2.3 绘图

ax.plot(x, y,linestyle='--',color='b')

ax.set_title('y = sin(x)') # 图名

ax.spines['top'].set_visible(False) # 不显示边框

ax.spines['right'].set_visible(False)

# 2.4 特定位置建立坐标轴

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

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

# axes_1的x轴字体设置

x1_label = ax.get_xticklabels()

[x1_label_temp.set_fontname('Times New Roman') for x1_label_temp in x1_label]

y1_label = ax.get_yticklabels()

[y1_label_temp.set_fontname('Times New Roman') for y1_label_temp in y1_label]

# 2.5 坐标轴刻度间隔设置

ax.set_yticks(np.arange(-1,1.1,0.5))

ax.set_xticks(np.arange(-2*np.pi,2*np.pi+0.1,0.5*np.pi))

# 2.6 坐标轴标签设置

labels=[str(ii)+'$\pi$' for ii in [-2,-1.5,-1,-0.5,0,0.5,1,1.5,2]]

ax.set_xticklabels(labels)

# 2.7 新建axes子图形ax_2,在特定位置添加坐标轴

ax_2 = ax.twinx()

[ax_2.spines[ii].set_visible(False) for ii in ['left','bottom']]

# 在子图形ax_2的y=0.8处新建坐标轴

ax_2.spines['top'].set_position(('data', 0.8))

ax_2.spines['top'].set_color('r')

# 在子图形ax_2的x=2.5*np.pi处新建y轴

ax_2.spines['right'].set_position(('data', 2.5*np.pi))

ax_2.spines['right'].set_color('red')

ax_2.tick_params(axis='y',

labelsize=9, # y轴字体大小设置

color='r', # y轴标签颜色设置

labelcolor='r', # y轴字体颜色设置

direction='out' # y轴标签方向设置

)

ax_2.set_ylabel('新建y轴',color='r')

plt.show()

运行结果

二、SubplotZero

axes.spines[‘bottom’].set_position((‘data’,num)) 的方法主要通过创建共用坐标轴的方法来创建不同的子图形对象,然后通过对子图形对象边框的操作实现在不同位置创建新的坐标轴的效果。

SubplotZero属于mpl_toolkits.axisartist.axislines下面的一个模块,运用SubplotZero在不同位置创建坐标轴更灵活方便。

代码示例1,基于Subplot生成Axes子图形对象

'''

1. 程序目的:

(1) 使用SubplotZero在不同位置创建坐标轴

2. 山东青岛 2021年5月16日

'''

# 1. 包的导入

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif']=['SimHei'] # 用来正常显示中文标签

plt.rcParams['axes.unicode_minus']=False # 用来正常显示负号

from mpl_toolkits.axisartist.axislines import SubplotZero

# 2. 创建绘图对象

fig = plt.figure(1, (10, 6),dpi=600) # plt.figure()创建绘图对象

# 2.1 运用SubplotZero添加子图形对象ax

ax = SubplotZero(fig, 1, 1, 1)

# 2.2 设置网格样式

ax.grid(True, linestyle='-.')

# 2.3 设置刻度

ax.set_ylim(-3, 3)

ax.set_yticks([-2,-1,-0.5,0,0.5,1,2])

ax.set_xlim([-5, 8])

# 2.4 添加ax子图形对象,这一句必须有,否则无法显示图形

fig.add_subplot(ax)

plt.show()

代码示例1运行结果 代码示例2,在基于Subplot生成Axes子图形对象中不同位置添加坐标轴

'''

1. 程序目的:

(1) 使用SubplotZero在不同位置创建坐标轴

2. 山东青岛 2021年5月16日

'''

# 1. 包的导入

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif']=['SimHei'] # 用来正常显示中文标签

plt.rcParams['axes.unicode_minus']=False # 用来正常显示负号

from mpl_toolkits.axisartist.axislines import SubplotZero

# 2. 创建绘图对象

fig = plt.figure(1, (10, 6),dpi=600) # plt.figure()创建绘图对象

# 2.1 运用SubplotZero添加子图形对象ax

ax = SubplotZero(fig, 1, 1, 1)

# 2.2 设置网格样式

ax.grid(True, linestyle='-.')

# 2.3 设置刻度

ax.set_ylim(-3, 3)

ax.set_yticks([-2,-1,-0.5,0,0.5,1,2])

ax.set_xlim([-5, 8])

# 2.4 添加ax子图形对象,这一句必须有,否则无法显示图形

fig.add_subplot(ax)

# 2.5 新建y=0的坐标轴,并添加箭头

ax.axis["xzero"].set_visible(True)

ax.axis["xzero"].label.set_text("新建y=0坐标")

ax.axis["xzero"].label.set_color('green')

ax.axis["xzero"].set_axisline_style("-|>") # 添加坐标箭头

# 2.6 新建一条y=2横坐标轴

ax.axis["新建1"] = ax.new_floating_axis(nth_coord=0, value=2,axis_direction="bottom")

ax.axis["新建1"].toggle(all=True)

ax.axis["新建1"].label.set_text("y = 2横坐标")

ax.axis["新建1"].label.set_color('blue')

# 2.7 通过offset建立具有偏移量的新的y轴

offset = (40, 0)

new_axisline = ax.get_grid_helper().new_fixed_axis

ax.axis["新建2"] = new_axisline(loc="right", offset=offset, axes=ax)

ax.axis["新建2"].label.set_text("新建纵坐标")

ax.axis["新建2"].label.set_color('red')

# 2.8 在ax子图形对象中绘制正弦曲线

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

ax.plot(xx, np.sin(xx),color='orange',linestyle='--')

plt.show()

代码示例2运行结果