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

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


前言

  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运行结果
    代码示例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运行结果
    添加新的坐标轴
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

EWBA_GIS_RS_ER

如有帮助,赏杯茶吧。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值