matplotlib 全局设置刻度数,X轴、Y轴、颜色条

1wnzp6jl  于 2023-06-06  发布在  其他
关注(0)|答案(3)|浏览(277)

对于我喜欢使用的字体大小,我发现在matplotlib的几乎每个轴上,5个刻度是最视觉上令人愉悦的刻度数。我还喜欢沿着x轴修剪最小的刻度,以避免重叠刻度标签。因此,对于几乎每一个情节,我发现自己使用以下代码。

from matplotlib import pyplot as plt
from matplotlib.ticker import MaxNLocator

plt.imshow( np.random.random(100,100) )
plt.gca().xaxis.set_major_locator( MaxNLocator(nbins = 7, prune = 'lower') )
plt.gca().yaxis.set_major_locator( MaxNLocator(nbins = 6) )
cbar = plt.colorbar()
cbar.locator = MaxNLocator( nbins = 6)
plt.show()

是否有一个rc设置,我可以使用,使默认定位器为我的x轴,y轴,和colorbar是默认的上述MaxNLocator与修剪选项的x轴?

bnl4lu3b

bnl4lu3b1#

为什么不编写一个自定义模块myplotlib来设置这些默认值呢?

import myplt
myplt.setmydefaults()

全局rc设置可能会破坏依赖于这些设置的其他应用程序。

t0ybt7op

t0ybt7op2#

matplotlib.ticker.MaxNLocator类有一个属性,可用于设置默认值:

default_params = dict(nbins = 10,
                      steps = None,
                      trim = True,
                      integer = False,
                      symmetric = False,
                      prune = None)

例如,脚本开头的这一行将在axis对象每次使用MaxNLocator时创建5个刻度。

from matplotlib.ticker import *
MaxNLocator.default_params['nbins']=5

然而,默认定位器是matplotlib.ticker.AutoLocator,基本上是用硬连接的参数调用MaxNLocator,因此如果没有进一步的黑客攻击,上述内容将不会产生全局影响。
要将默认定位器更改为MaxNLocator,我能找到的最好方法是使用自定义方法覆盖matplotlib.scale.LinearScale.set_default_locators_and_formatters

import matplotlib.axis, matplotlib.scale 
def set_my_locators_and_formatters(self, axis):
    # choose the default locator and additional parameters
    if isinstance(axis, matplotlib.axis.XAxis):
        axis.set_major_locator(MaxNLocator(prune='lower'))
    elif isinstance(axis, matplotlib.axis.YAxis):
        axis.set_major_locator(MaxNLocator())
    # copy & paste from the original method
    axis.set_major_formatter(ScalarFormatter())
    axis.set_minor_locator(NullLocator())
    axis.set_minor_formatter(NullFormatter())
# override original method
matplotlib.scale.LinearScale.set_default_locators_and_formatters = set_my_locators_and_formatters

这有一个很好的副作用,即能够为X和Y刻度指定不同的选项。

e0uiprwp

e0uiprwp3#

根据Anony-Mousse的建议
创建一个文件myplt.py

#!/usr/bin/env python
# File: myplt.py

from matplotlib import pyplot as plt
from matplotlib.ticker import MaxNLocator

plt.imshow( np.random.random(100,100) )
plt.gca().xaxis.set_major_locator( MaxNLocator(nbins = 7, prune = 'lower') )
plt.gca().yaxis.set_major_locator( MaxNLocator(nbins = 6) )
cbar = plt.colorbar()
cbar.locator = MaxNLocator( nbins = 6)
plt.show()

在代码或ipython会话中

import myplt

相关问题