0

matplotlib では、軸にラベルを重ねる最もクリーンで堅牢な方法を知りたいです。これは、おそらく次の例で最もよく示されています。

ラベル

通常の軸ラベル/目盛りは 5.00 単位ごとに配置されますが、目盛りのない追加のラベルが軸に重ねられています (これは、1114.00 を部分的にカバーする 1113.75 と完全にカバーされる 1105.00 で確認できます)。ラベルのフォントとサイズは、通常の目盛り付きのものと同じで、背景 (存在する場合) が軸のすぐ上に (目盛りのように) 表示されます。

matplotlib でこの効果を得る最も簡単な方法は何ですか?

編集@Kenの提案に続いて、目盛りマーカーを削除し、ラベルの背景/フォント/ zorderを変更することで、既存の目盛り/ラベル の効果を得ることができました。ただし、軸に新しい目盛り/ラベルを追加する最善の方法がわかりません。ax.yaxis.get_ticklinesax.yaxis.get_ticklabels

言い換えればadd_tick(ax.yaxis, loc)、場所に目盛りを追加し、操作するオブジェクトとオブジェクトをloc返す関数を探しています。ticklineticklabel

4

2 に答える 2

0

私はこれをやろうとしたことはありませんが、Artistチュートリアルが役立つかもしれないと思います。特に、最後のセクションには次のコードがあります。

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.xdataまたはline.ydata配列には、必要な情報を分離するのに十分な情報が含まれている可能性があります。もちろん、手動で目盛りを追加している場合は、そうするとインスタンスが返される可能性があるため、作成時に変更するだけで済みます。

于 2012-08-08T22:29:20.507 に答える
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)

特にエレガントではありませんが、機能しているように見えます。

于 2012-08-16T13:13:56.067 に答える