Python Matplotlib 自定义坐标轴刻度:xticks与yticks详解
本文介绍如何使用Python Matplotlib库中的xticks()和yticks()函数自定义二维图像的横纵坐标刻度。通过调整locs和labels参数,可实现显示所有整数、隐藏刻度、自定义标签文本及样式(如颜色、旋转角度),并支持结合calendar模块生成月份或星期等复杂标签,提升图表可读性。
Matplotlib坐标轴刻度自定义概述
在使用matplotlib绘制二维图像时,默认的横坐标和纵坐标刻度往往无法满足具体需求。此时,需要借助xticks()和yticks()函数分别对x轴和y轴的刻度进行自定义设置。
import numpy as np
import matplotlib.pyplot as plt
x = range(1,13,1)
y = range(1,13,1)
plt.plot(x,y)
plt.show()
假设x坐标和y坐标均表示1到12的整数。若不进行任何坐标设置直接绘图,默认效果如下:

此时,x轴和y轴仅显示偶数刻度,奇数刻度被隐藏。这种显示方式在展示实验结果或插入文章时,会显著影响图表的可读性。
为了提高坐标轴的可读性,有多种设置方法。本文重点介绍matplotlib提供的xticks()和yticks()函数。
相关文档参考:xticks()函数介绍 yticks()函数介绍
xticks()函数参数详解
xticks()函数主要包含3个参数:
xticks(locs, [labels], **kwargs) # Set locations and labels
locs参数为数组类型(array_like, optional),用于指定x轴刻度线显示的位置,即ticks放置的具体坐标。例如,若希望x轴显示1到12的所有整数,可将locs参数设置为range(1,13,1)。第二个参数labels同样为数组类型(array_like, optional),为可选参数。若不添加该参数,则在locs指定的位置直接显示locs数组中的数值;若提供labels,则在这些位置显示labels对应的标签。
具体效果如下图所示:
import numpy as np
import matplotlib.pyplot as plt
x = range(1,13,1)
y = range(1,13,1)
plt.plot(x,y)
plt.xticks(x)
plt.show()

在xticks()函数中,locs参数设为数组x(即1到12的所有整数),图像将在这些位置绘制ticks(刻度线),如上图所示。
当赋予labels的值为空数组时,虽然在locs指定的位置会绘制ticks,但不会显示任何标签值。
import numpy as np
import matplotlib.pyplot as plt
x = range(1,13,1)
y = range(1,13,1)
plt.plot(x,y)
plt.xticks(x,())
plt.show()
其显示效果如下:

该示例清晰展示了locs和labels的关系:locs决定刻度位置,labels决定该位置显示的标签文本。若未指定labels,默认显示与locs相同的数值。
自定义标签与样式控制
因此,对于labels参数,我们可以赋予任意自定义文本,例如人名、月份名称等。
import numpy as np
import matplotlib.pyplot as plt
x = range(1,13,1)
y = range(1,13,1)
plt.plot(x,y)
plt.xticks(x, ('Tom','Dick','Harry','Sally','Sue','Lily','Ava','Isla','Rose','Jack','Leo','Charlie'))
plt.show()
每个标签将依次显示labels数组中的人名:

同样可以显示月份名称:
import numpy as np
import matplotlib.pyplot as plt
import calendar
x = range(1,13,1)
y = range(1,13,1)
plt.plot(x,y)
plt.xticks(x, calendar.month_name[1:13],color='blue',rotation=60)
plt.show()
显示效果如下:

此处引入了calendar模块以获取月份名称。calendar.month_name[1:13]生成了1到12月名称的数组。参数color='blue'将标签颜色设置为蓝色,rotation参数使标签逆时针旋转60度。
通过上述示例可以看出,第3个参数**kwargs用于控制labels的样式。具体可通过Text属性中的定义进行配置,更多细节可参考Text查询。
隐藏刻度与yticks应用
此外,通过第1个参数locs可以看出,xticks()函数还可用于隐藏x轴刻度。只需将空数组赋予locs参数,即可不显示任何x轴ticks,参考:x轴数值隐藏。
import numpy as np
import matplotlib.pyplot as plt
import calendar
x = range(1,13,1)
y = range(1,13,1)
plt.plot(x,y)
plt.xticks([])
plt.show()
可见x轴上已无ticks显示:

同理,yticks()函数的定义与xticks()完全相同。对于前述第一个例子,若希望y轴刻度也显示1到12的所有整数,只需将range(1,13,1)赋予yticks()的locs参数即可:
import numpy as np
import matplotlib.pyplot as plt
import calendar
x = range(1,13,1)
y = range(1,13,1)
plt.plot(x,y)
plt.xticks(x)
plt.yticks(y)
plt.show()
其效果如下:

综合示例:月份与星期映射
综上所述,可以设计一个x轴为月份、y轴为星期的图像:
import numpy as np
import matplotlib.pyplot as plt
import calendar
from datetime import *
x = range(1,13,1)
y = range(1,13,1)
plt.plot(x,y)
plt.xticks(x, calendar.month_name[1:13],color='blue',rotation=60)
today = datetime(2018, 9, 10)
a=[]
for i in range(12):
a.append(calendar.day_name[today.weekday()+(i%7)])
plt.yticks(y,a,color='red')
plt.show()

具体逻辑为:一月份对应星期一,二月份对应星期二,依此类推,直至将12个月份全部安排完毕。
以上关于Python Matplotlib改变横坐标和纵坐标刻度(ticks)的方法即为全部内容,希望能对大家有所帮助,也欢迎大家继续支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













