我可以在rcParams中设置脊椎和刻度吗?

时间:2015-03-06 13:24:45

标签: python matplotlib

我倾向于在Matplotlib(v1.3.1)图中使用以下轴选项:

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

        ax.get_xaxis().tick_bottom()  
        ax.get_yaxis().tick_left()  

        ax.tick_params(axis="both", which="both", bottom="off", top="off",  
                labelbottom="on", left="off", right="off", labelleft="on")  

抓住当前轴后这个工作正常,但我想知道是否可以通过设置rcParams中的内容来实现所有这些默认行为?

2 个答案:

答案 0 :(得分:1)

正如ImportanceOfBeingErnest的评论所述,现在可以:

plt.rcParams['axes.spines.top'] = False
plt.rcParams['axes.spines.bottom'] = False
plt.rcParams['axes.spines.left'] = False
plt.rcParams['axes.spines.right'] = False

对于多个rcParams,请使用dict

plt.rcParams.update({'axes.spines.top': False, 'axes.spines.right': False})

答案 1 :(得分:0)

我遇到了同样的问题,并且在此答案之间找到了以下内容:

Matplotlib 1.3.1 将这些输入中的任何一个识别为 rcParams:

>>> plt.matplotlib.__version__
'1.3.1'
>>> plt.rcParams['axes.spines.top'] = False
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\<username>\Software\WinPython-64bit-2.7.6.4\python-2.7.6.amd64\lib\site-packages\matplotlib\__init__.py", line 811, in __setitem__
    See rcParams.keys() for a list of valid parameters.' % (key,))
KeyError: 'axes.spines.top is not a valid rc parameter.See rcParams.keys() for a list of valid parameters.' 

Matplotlib 1.5.1 但是:

In[1]: from matplotlib import pyplot as plt 
In[2]: plt.matplotlib.__version__
Out[2]: '1.5.1'
In[3]: plt.rcParams
Out[3]: 
RcParams({u'agg.path.chunksize': 0,
          [...]
          u'axes.spines.bottom': True,
          u'axes.spines.left': True,
          u'axes.spines.right': False,
          u'axes.spines.top': False,
          [...]
In[4]: x = np.linspace(0, 6)
  ...:     y = np.sin(x)
  ...:     plt.close('all')
  ...:     plt.plot(x,y,'k-')

Figure with axes.spines deactivated for top and right edge in matplotlibrc

为了删除刻度线,我不得不在事后删除它们,使用 ax.tick_params(top="off", right="off")。我在 rcParams 中没有找到任何相关内容。

我还测试了 matplotlib 2.2.3。在那里,axes.spine.* 顶部和底部没有刻度,没有指定任何其他参数。 matplotlibrc 中的条目删除了整个轴,包括刻度线,或者 ytick.right 字典中的新 xtick.toprcParams 条目默认为 False

The same figure with matplotlib 2.2.3, using the same matplotlibrc

不幸的是,即使在相同情况下显示顶部网格线,如果右侧的最后一条网格线正好位于边缘,它仍然会隐藏右侧的最后一条网格线。

==> 换句话说:

  • 1.3.1 版没有全局开关,需要应用 ax.spines["top"].set_visible(False)
  • 1.5.1 可以使用 Dan 建议的方法(将 axes.spine.topaxes.spine.right 设置为 False)全局删除行,但不能删除刻度线,它仍然需要 {{ 1}} 命令
  • 以后的版本(不确定是哪个版本引入的)也有 ax.tick_params()ytick.right 设置,可以设置为 xtick.topTrue 也可以省略勾号那些边缘。