【问题标题】:Matplotlib adding overlay labels to an axisMatplotlib 将叠加标签添加到轴
【发布时间】:2012-08-08 21:47:24
【问题描述】:

在 matplotlib 中,我想知道将标签叠加到轴上的最简洁和最可靠的方法。这可能最好用一个例子来说明:

虽然每 5.00 个单位放置正常轴标签/刻度,但轴上已覆盖了额外的标签没有刻度(这可以在 1113.75 看到,它部分覆盖了 1114.00 和 1105.00,它被完全覆盖了)。这些标签的字体和大小也与它们正常的、勾选的、对应的字体和大小相同,背景(如果有的话)一直到轴(就像一个刻度线一样)。

在matplotlib中获得这种效果最简单的方法是什么?

编辑 根据@Ken 的建议,我已经设法通过使用ax.yaxis.get_ticklinesax.yaxis.get_ticklabels 来移除刻度标记并更改背景/字体/zorder,从而获得现有刻度/标签的效果一个标签。但是,我不确定如何最好地向轴添加新的刻度/标签。

换句话说,我正在寻找一个函数add_tick(ax.yaxis, loc),它在loc 位置添加一个刻度并返回ticklineticklabel 对象供我操作。

【问题讨论】:

    标签: python matplotlib


    【解决方案1】:

    我从未尝试过这样做,但我认为Artist tutorial 可能对您有所帮助。特别是最后一节有以下代码:

    for line in ax1.yaxis.get_ticklines():
        # line is a Line2D instance
        line.set_color('green')
        line.set_markersize(25)
        line.set_markeredgewidth(3)
    

    我认为使用line.set_markersize(0) 之类的东西可能会使标记的大小为零。困难的部分可能是找到需要完成的部分。 line.xdataline.ydata 数组可能包含足够的信息来隔离您需要的信息。当然,如果您手动添加刻度线,则可能会在您这样做时返回实例,因此您可以在创建它们时修改它们。

    【讨论】:

    • 我不确定如何/何时添加额外的刻度/标签(理想情况下,我想尽可能晚地添加),其次,在减小刻度的大小时,如何使标签背景展开以填充空间(如示例图像中所示)。
    • @FreddieWitherden 我想我会尝试使用这些东西,并且在您尝试了一些寻求具体帮助的东西之后。也许给我们一些你所做的尝试的例子。
    【解决方案2】:

    我能想到的最佳解决方案:

    # main: axis; olocs: locations list; ocols: location colours
    def overlay_labels(main, olocs, ocols):
        # Append the overlay labels as ticks
        main.yaxis.set_ticks(np.append(main.yaxis.get_ticklocs(), olocs))
    
        # Perform generic formatting to /all/ ticks
        # [...]
    
        labels  = reversed(main.yaxis.get_ticklabels())
        markers = reversed(main.yaxis.get_ticklines()[1::2]) # RHS ticks only
        glines  = reversed(main.yaxis.get_gridlines())
        rocols  = reversed(ocols)
    
        # Suitably format each overlay tick (colours and lines)
        for label,marker,grid,colour in izip(labels, markers, glines, rocols):
            label.set_color('white')
            label.set_backgroundcolor(colour)
            marker.set_visible(False)
            grid.set_visible(False)
    

    它不是特别优雅,但似乎确实有效。

    【讨论】:

      猜你喜欢
      • 2013-01-23
      • 1970-01-01
      • 2015-05-23
      • 1970-01-01
      • 2020-02-19
      • 2021-12-12
      • 1970-01-01
      • 2022-11-01
      • 2016-01-13
      相关资源
      最近更新 更多