小瓜讲matplotlib高级篇——坐标轴设置(坐标轴居中、坐标轴箭头、刻度设置、标识设置)

问题

我们在用matplotlib绘制图的时候总是有各种需求,比如下图为matplotlib默认设置画的正弦图

但是我们的心中想要达到的目标图为下图,那么就需要对坐标轴进行设置。

解决方案

这里要介绍matplotlib绘图辅助工具包mpl_toolkits,里面包含了一系列对于坐标轴设置的方法。
首先导入辅助工具包里面的轴系设置包

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import mpl_toolkits.axisartist as axisartist
#导入辅助工具包里面的坐标轴系设置方法axisartist

新建画板,添加绘图区

fig = plt.figure('Sine Wave', (10,8))
#figure(num, figsize, dpi, facecolor, edgecolor, frameon, FigureClass, clear)
#新建了一个画板(画图视窗)
ax = axisartist.Subplot(fig, 1,1,1)
fig.add_axes(ax)
#新建一个轴系图(绘图区)对象ax,并添加到画板中

隐藏默认坐标轴(上下左右边框),并新建坐标轴X-Y,同时设置刻度标识方向

ax.axis[:].set_visible(False)
#
ax.axis["x"] = ax.new_floating_axis(0, 0)
ax.axis["y"] = ax.new_floating_axis(1, 0)
#new_floating_axis(self, nth_coord, value, axis_direction='bottom')
#新建可移动的坐标轴
ax.axis["x"].set_axis_direction('top')
ax.axis["y"].set_axis_direction('left')

创建坐标轴的方法有两种:

  1. new_fixed_axis(self, loc, offset=None)
  2. new_floating_axis(self, nth_coord, value, axis_direction=‘bottom’)
    ①:nth_coord: 坐标轴方向,0代表X方向,1代表Y方向
    ②:value:坐标轴处于位置,如果是平行与X轴的新坐标轴,则代表Y位置(即通过(0,value)),如果是平行与Y轴的新坐标轴,则代表X位置(即通过(value,0))。
    ③:axis_direction:代表刻度标识字的方向,可选[‘top’, ‘bottom’, ‘left’, ‘right’]

其中new_floating_axis()相对更加灵活,本节中采用new_floating_axis()方法来设置坐标轴位置。

加上坐标轴箭头,设置刻度标识位置

ax.axis["x"].set_axisline_style("->", size = 2.0)
ax.axis["y"].set_axisline_style("->", size = 2.0)
ax.axis["x"].set_axis_direction('top')
ax.axis["y"].set_axis_direction('left')

画上y=sin(t)折线图,设置刻度范围,设置刻度标识,设置坐标轴位置

t = np.linspace(0, 2*np.pi)
y = np.sin(t)
ax.plot(t, y, color = 'red', linewidth = 2)
plt.title('y = 2sin(2t)',fontsize = 14, pad = 20)
#
ax.set_xticks(np.linspace(0.25,1.25,5)*np.pi)
ax.set_xticklabels(['$\\frac{\pi}{4}$','$\\frac{\pi}{2}$', '$\\frac{3\pi}{4}$', '$\pi$', '$\\frac{5\pi}{4}$', '$\\frac{3\pi}{2}$'])
ax.set_yticks([0, 1, 2])
#设置刻度标识显示
ax.set_xlim(-0.5*np.pi,1.5*np.pi)
ax.set_ylim(-2, 2)
plt.show()

在matplotlib中公式打印可以使用Latex格式。

由于在新建坐标轴中设定了轴的通过点,所以通过设置坐标轴范围,可以间接移动坐标轴在图中的位置(一般放在最后作为最后的设定,如果放在前面,可能后续有方法使得值域超过该范围,系统会自动适应,导致显示不能达到我们的预想)。

运行结果如下,完美O(∩_∩)O。
在这里插入图片描述

代码附录
import numpy as np
import matplotlib.pyplot as plt
import mpl_toolkits.axisartist as axisartist

fig = plt.figure('Sine Wave', (10,8))

ax = axisartist.Subplot(fig, 1,1,1)
fig.add_axes(ax)

ax.axis[:].set_visible(False)

ax.axis["x"] = ax.new_floating_axis(0, 0)
ax.axis["y"] = ax.new_floating_axis(1, 0)
ax.axis["x"].set_axis_direction('top')
ax.axis["y"].set_axis_direction('left')
ax.axis["x"].set_axisline_style("->", size = 2.0)
ax.axis["y"].set_axisline_style("->", size = 2.0)

t = np.linspace(0, 1*np.pi)
y = 2*np.sin(2*t)
ax.plot(t, y, color = 'red', linewidth = 2)
plt.title('y = 2sin(2t)',fontsize = 14, pad = 20)

ax.set_xticks(np.linspace(0.25,1.25,5)*np.pi)
ax.set_xticklabels(['$\\frac{\pi}{4}$','$\\frac{\pi}{2}$', '$\\frac{3\pi}{4}$', '$\pi$', '$\\frac{5\pi}{4}$', '$\\frac{3\pi}{2}$'])
ax.set_yticks([0, 1, 2])

ax.set_xlim(-0.5*np.pi,1.5*np.pi)
ax.set_ylim(-2.2, 2.2)

plt.show()
文章导引列表:
机器学习
  1. 小瓜讲机器学习——分类算法(一)logistic regression(逻辑回归)算法原理详解
  2. 小瓜讲机器学习——分类算法(二)支持向量机(SVM)算法原理详解
  3. 小瓜讲机器学习——分类算法(三)朴素贝叶斯法(naive Bayes)
  4. 小瓜讲机器学习——分类算法(四)K近邻法算法原理及Python代码实现
  5. 小瓜讲机器学习——分类算法(五)决策树算法原理及Python代码实现
  6. 小瓜讲机器学习——聚类算法(一)K-Means算法原理Python代码实现
  7. 小瓜讲机器学习——聚类算法(二)Mean Shift算法原理及Python代码实现
  8. 小瓜讲机器学习——聚类算法(三)DBSCAN算法原理及Python代码实现

数据分析
  1. 小呆学数据分析——使用pandas中的merge函数进行数据集合并
  2. 小呆学数据分析——使用pandas中的concat函数进行数据集堆叠
  3. 小呆学数据分析——pandas中的层次化索引
  4. 小呆学数据分析——使用pandas的pivot进行数据重塑
  5. 小呆学数据分析——用duplicated/drop_duplicates方法进行重复项处理
  6. 小呆学数据分析——缺失值处理(一)
  7. 小呆学数据分析——异常值判定与处理(一)
  8. 小瓜讲数据分析——数据清洗

数据可视化
  1. 小瓜讲数据分析——数据可视化工程(matplotlib库使用基础篇)
  2. 小瓜讲matplotlib高级篇——坐标轴设置(坐标轴居中、坐标轴箭头、刻度设置、标识设置)
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

努力的骆驼

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值