35

有没有一种方法可以增加 matplotlib 中刻度的厚度和大小,而不必编写像这样的长代码:

for line in ax1.yaxis.get_ticklines():
    line.set_markersize(25)
    line.set_markeredgewidth(3)

这段代码的问题在于它使用了一个循环,这通常会消耗大量的 CPU 使用率。

4

3 回答 3

54

更简单的方法是使用对象的set_tick_params功能axis

ax.xaxis.set_tick_params(width=5)
ax.yaxis.set_tick_params(width=5)

这样做意味着您可以在每个轴的基础上进行更改,而无需担心全局状态,也无需对 mpl 对象的内部结构做出任何假设。

如果您想为轴中的所有刻度设置此项,

ax = plt.gca()
ax.tick_params(width=5,...)

看看set_tick_paramsdoc 和 tick_params 有效关键字

于 2013-02-05T16:56:13.313 回答
21

您可以使用like in更改所有matplotlib默认值rcParams

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt

# set tick width
mpl.rcParams['xtick.major.size'] = 20
mpl.rcParams['xtick.major.width'] = 4
mpl.rcParams['xtick.minor.size'] = 10
mpl.rcParams['xtick.minor.width'] = 2

x = np.linspace(0., 10.)
plt.plot(x, np.sin(x))

plt.show()
于 2013-02-05T11:44:28.003 回答
6

您可以使用matplotlib.pyplot.setp

plt.setp(ax.yaxis.get_ticklines(), 'markersize', 25)
plt.setp(ax.yaxis.get_ticklines(), 'markeredgewidth', 3)

您也可以使用列表推导,虽然没有返回值可能没有多大意义,除了减少代码中的行数参见例如here

[line.set_markersize(25) for line in ax1.yaxis.get_ticklines()]
[line.set_markeredgewidth(3) for line in ax1.yaxis.get_ticklines()]
于 2013-02-05T14:13:05.827 回答