4

matplotlib を使用して複数の y 軸を持つ可能性のある (png) プロットを生成する一般的なプロット クラスがありますが、常に日付を示す単一の (共有) x 軸があります。

これは、x 軸ラベルの書式設定を処理するメソッドです。

def format_xaxis(self, axis, primary):
    steps = (1,2,3,4,6,12)
    step = steps[min(len(self.dates) // 1000, 5)]
    axis.set_axisbelow(True)
    axis.xaxis.grid(b=True, which='minor', color='0.90', linewidth=0.5)
    axis.xaxis.set_minor_locator(MonthLocator(bymonth=range(1,13,step)))
    axis.xaxis.set_major_locator(YearLocator())
    if primary:
        axis.xaxis.set_major_formatter(DateFormatter(fmt='%b %y'))
        axis.xaxis.set_minor_formatter(DateFormatter(fmt='%b'))
    else:
        plt.setp(axis.get_xticklabels(), visible=False)

入力あり:

  • primary は、これが主軸かどうかを示すブール値です
  • axis は matplotlib 軸インスタンスです

私が望む (そして上記の方法から期待される) ことは、主軸のみにラベルがあり、メジャー ラベルは月-年であり、マイナー ラベルは月のみであることです。

主軸にはメジャー ラベルのみが表示され、マイナー ラベルはまったく表示されません。

最後の 6 行を次のように変更すると:

    axis.xaxis.set_major_locator(YearLocator())
    axis.xaxis.set_major_formatter(DateFormatter(fmt='%b %y'))
    axis.xaxis.set_minor_formatter(DateFormatter(fmt='%b'))
    if not primary:
        plt.setp(axis.get_xticklabels(), visible=False)

次に、マイナー ラベルがすべての軸に表示されます。

プライマリ x 軸のみにマイナー x 軸の目盛りラベルを表示するにはどうすればよいですか?

編集:

2番目のコードブロックでKevinGの提案を使用すると機能します:

    axis.xaxis.set_major_locator(YearLocator())
    axis.xaxis.set_major_formatter(DateFormatter(fmt='%b %y'))
    axis.xaxis.set_minor_formatter(DateFormatter(fmt='%b'))
    if not primary:
        plt.setp(axis.get_xticklabels(minor=False), visible=False)
        plt.setp(axis.get_xticklabels(minor=True), visible=False)
4

1 に答える 1

3

ティックラベルのものの多くがminor=Falseデフォルトの引数として持っていることに気づきました。今のところ多軸プロットが手元にないので、私はあなたがそこを見ることを提案することしかできません。私は次のようなものを想像します

if primary:
    axis.xaxis.set_major_formatter(DateFormatter(fmt='%b %y'))
    axis.xaxis.set_minor_formatter(DateFormatter(fmt='%b'))
    plt.setp(axis.get_xticklabels(minor=True), visible=True)
else:
    plt.setp(axis.get_xticklabels(), visible=False)

何らかの効果があるはずです。

于 2013-01-14T03:05:34.263 に答える