在matplotlibrc中设置spines

时间:2010-08-09 11:00:16

标签: python matplotlib

由于一个奇怪的原因,我找不到在Python的matplotlibrc文件中指定spines配置的方法。有关如何使matplotlib默认不绘制上右刺的任何想法? spines http://matplotlib.sourceforge.net/_images/whats_new_99_spines.png

有关matplotlib中刺的信息的更多信息是here

谢谢

3 个答案:

答案 0 :(得分:17)

为了隐藏子图的右侧和顶部脊柱,您需要将相关脊柱的颜色设置为'none',并将蜱的位置设置为'left' ,和'bottom'为ytick(为了隐藏刻度线以及刺)。

很遗憾,目前这些都不能通过matplotlibrc访问。验证matplotlibrc中指定的参数,然后将其存储在名为rcParams的dict中。然后由各个模块检查该字典中的键,其值将作为其默认值。如果他们没有检查其中一个选项,则该选项不能通过rc文件进行更改。

由于rc系统的性质以及写入棘刺的方式,改变代码以实现这一点并不简单:

Spines当前通过用于定义轴颜色的rc参数获取颜色;如果不隐藏所有轴绘图,则无法将其设置为'none'。他们也不知道他们是toprightleft还是bottom - 这些只是存储在dict中的四个单独的刺。单个脊椎对象不知道它们构成的绘图的哪一侧,因此您不能只添加新的rc参数并在脊椎初始化期间分配正确的参数。

self.set_edgecolor( rcParams['axes.edgecolor'] )

./ matplotlib / lib / matplotlib / spines.py ,__ init __(),第54行

如果您有大量现有代码,那么手动将轴参数添加到每个代码将会非常麻烦,您可以交替使用辅助函数来遍历所有Axis对象并为您设置值。

以下是一个例子:

import matplotlib
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.pyplot import show

# Set up a default, sample figure. 
fig = plt.figure()
x = np.linspace(-np.pi,np.pi,100)
y = 2*np.sin(x)

ax = fig.add_subplot(1,2,2)
ax.plot(x,y)
ax.set_title('Normal Spines')

def hide_spines():
    """Hides the top and rightmost axis spines from view for all active
    figures and their respective axes."""

    # Retrieve a list of all current figures.
    figures = [x for x in matplotlib._pylab_helpers.Gcf.get_all_fig_managers()]
    for figure in figures:
        # Get all Axis instances related to the figure.
        for ax in figure.canvas.figure.get_axes():
            # Disable spines.
            ax.spines['right'].set_color('none')
            ax.spines['top'].set_color('none')
            # Disable ticks.
            ax.xaxis.set_ticks_position('bottom')
            ax.yaxis.set_ticks_position('left')

hide_spines()
show()

只需在hide_spines()之前致电show(),它就会在show()显示的所有数字中隐藏它们。除了花时间修补matplotlib并添加rc支持所需选项之外,我想不出更简单的方法来改变大量数字。

答案 1 :(得分:13)

要使matplotlib不绘制上右刺,可以在matplotlibrc文件中设置以下内容

axes.spines.right : False
axes.spines.top : False

答案 2 :(得分:0)

ax.spines["top"].set_visible(False)    
ax.spines["right"].set_visible(False)