【问题标题】:How can I set the color for all aspects of an axis at once?如何一次为轴的所有方面设置颜色?
【发布时间】:2013-12-27 16:09:00
【问题描述】:

我想将主要和次要刻度、刻度标签和轴本身的颜色都设置为相同的颜色,但我想出的唯一方法是

fig, ax_a_mj = matplotlib.pyplot.subplots()

ax_a_mj.spines['bottom'].set_color('r')
ax_a_mj.tick_params(axis='x', colors='r')
ax_a_mj.tick_params(axis='x', colors='r', which='minor')
ax_a_mj.xaxis.label.set_color('r')

有没有办法用一条语句来做到这一点?

我想做所有轴的情况如何,我有四个:

fig, ax_a_mj = matplotlib.pyplot.subplots()
ax_a_me = ax_a_mj.twinx()
ax_p_mj = ax_a_mj.twiny()

ax_a_mj.spines['bottom'].set_color('r')
ax_a_mj.spines['left'].set_color('r')
ax_a_mj.spines['right'].set_color('r')
ax_a_mj.spines['top'].set_color('r')
ax_a_mj.tick_params(axis='x', colors='r', which='both')
ax_a_mj.tick_params(axis='y', colors='r', which='both')
ax_p_mj.tick_params(axis='x', colors='r', which='both')
ax_a_me.tick_params(axis='y', colors='r', which='both')
ax_a_mj.xaxis.label.set_color('r')
ax_a_mj.yaxis.label.set_color('r')
ax_p_mj.xaxis.label.set_color('r')
ax_a_me.yaxis.label.set_color('r')

【问题讨论】:

    标签: python colors matplotlib axes


    【解决方案1】:

    如果你经常这样做,只需为自己编写一个辅助函数

    def colorize(ax_in, color_in):
        ax_in.spines['bottom'].set_color(color_in)
        ax_in.tick_params(axis='x', colors=color_in, which='both')
        ax_in.xaxis.label.set_color(color_in)
    

    注意which 可以是'both',这将设置主要和次要刻度(doc)

    如果你经常使用这个,你可以把它修补到Axes

    matplotlib.axes.Axes.my_colorize = colorize
    

    然后

    my_ax.my_colorize('r')
    

    应该可以。

    Tony Yu 正在进行支持样式表的工作,第一部分已经合并到 master (https://github.com/matplotlib/matplotlib/pull/2236)。

    【讨论】:

    • 谢谢。这看起来像答案。我对这个问题做了一点补充:如果我想对所有轴都这样做,我有四个。有什么办法可以让它比我现有的更紧凑?
    • @raxacoricofallapatorius 不要在你提出问题后修改你的问题来扩展它,这真的很烦人。只需遍历一个轴列表,每个轴都调用 colerize。
    猜你喜欢
    • 2018-01-18
    相关资源
    最近更新 更多