Matplotlib将叠加标签添加到轴

时间:2012-08-08 21:47:25

标签: python matplotlib

在matplotlib中,我希望了解标签覆盖到轴上的最干净,最强大的方法。这可能最好用一个例子证明:

Labels

虽然普通轴标签/刻度线每隔5.00单位放置另外的标签没有刻度已经叠加到轴上(这可以在1113.75处看到,其部分覆盖1114.00和1105.00,完全覆盖)。这些标签的字体和大小与正常,勾选的相同,背景(如果有的话)直到​​轴(如刻度标记)。

在matplotlib中获取此效果的最简单方法是什么?

修改 根据@ Ken的建议,我设法通过使用ax.yaxis.get_ticklinesax.yaxis.get_ticklabels获取效果现有的刻度/标签来删除刻度标记并更改背景/标签的font / zorder。但是,我不确定如何最好地为轴添加新的刻度/标签。

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

2 个答案:

答案 0 :(得分:0)

我从未尝试过这样做,但我认为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数组可能包含足够的信息来隔离您需要的数据。当然,如果您手动添加刻度标记,则可能会在执行此操作时返回实例,因此您可以在创建实例时对其进行修改。

答案 1 :(得分:0)

我能够设计的最佳解决方案:

# 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)

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

相关问题