Matplotlib 坐标轴

一、坐标轴上下限

使用plt.xlim()plt.ylim()来调整上下限的值:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0,10,100)
plt.plot(x,np.sin(x))
plt.xlim(-1,11)
plt.ylim(-1.5,1.5)
plt.show()

也可以让坐标轴逆序显示,只需要逆序提供坐标轴的限值:

plt.plot(x,np.sin(x))
plt.xlim(11,-1)
plt.ylim(1.5,-1.5)

或者使用plt.axis()方法设置坐标轴的上下限(注意区别axes和axis),参数方式是[xmin, xmax, ymin, ymax]

plt.plot(x,np.sin(x))
plt.axis([-1,11,-1.5,1.5])

axis的作用不仅于此,还可以按照图形的内容自动收缩坐标轴,不留空白。此种情况下,x和y轴的限值会自动计算,不用提供:

plt.plot(x,np.cos(x))
plt.axis('tight')
# -0.5, 10.5, -1.0993384025373631, 1.0996461858110391)

更多类似的常用设置值有:

  • off:隐藏轴线和标签
  • tight:紧缩模式
  • equal:以1:1的格式显示,x轴和y轴的单位长度相等
  • scaled: 通过更改绘图框的尺寸来获得相同的结果
  • square: x轴和y轴的限制值一样

二、坐标轴刻度

通常情况下,系统会自动根据提供的原始数据,生成x和y轴的刻度标签。但是很多时候,我们往往需要自定义刻度,让它符合我们的需要,比如下面的例子:

plt.plot(np.random.randn(1000).cumsum())
plt.show()

我们可以手动提供刻度值,并调整刻度的角度和大小:

plt.plot(np.random.randn(1000).cumsum())
plt.xticks([0,250,500,750,1000],rotation=30, fontsize='large')
plt.yticks([-45,-35,-25,-15,0],rotation=30, fontsize='small')
plt.show()

三、坐标轴刻度详解

Matplotlib图形对象具有层级关系。Figure对象其实就是一个盛放图形元素的盒子box,每个figure都会包含一个或多个axes对象,而每个axes对象又会包含其它表示图形内容的对象,比如xais和yaxis,也就是x轴和y轴。

  • 主要刻度和次要刻度

每个坐标轴都有主要刻度和次要刻度,主要刻度往往更大或者突出显示,而次要刻度往往更小,一般不直接显示。

下面是一个对数坐标轴,可以看到次要刻度:

ax = plt.axes(xscale='log', yscale='log')

我们发现每个主要刻度都显示未一个较大的刻度线和标签,而次要刻度都显示为一个较小的刻度线,并且不现实标签。

 

  • 隐藏刻度与标签

如果我们想隐藏刻度或标签,就要着落在locator和formatter这两大属性上了:

ax = plt.axes()
x = np.linspace(0,10,100)
ax.plot(np.cos(x))

ax.yaxis.set_major_locator(plt.NullLocator())
ax.xaxis.set_major_formatter(plt.NullFormatter())
plt.show()

可以看出,没有locator,刻度和标签都会被隐藏起来;没有formatter,隐藏标签,但刻度还存在。

  • 设置刻度数量

默认情况下,matplotlib会自动帮我们调节刻度的数量,但有时候也需要我们自定义刻度数量:

fig, ax = plt.subplots(4, 4, sharex=True, sharey=True)
for axi in ax.flat:
    axi.xaxis.set_major_locator(plt.MaxNLocator(4))
    axi.yaxis.set_major_locator(plt.MaxNLocator(4))
plt.show()

posted @ 2020-04-26 10:09  如心幻雨  阅读(3598)  评论(0编辑  收藏  举报