あまりにも多くのティックを修正する#

予期しないティック動作の一般的な原因の 1 つは、数値または日時オブジェクトの代わりに文字列のリストを渡すことです。これは、カンマ区切りのテキスト ファイルを読み取るときに、予告なしに簡単に発生する可能性があります。Matplotlib は、文字列のリストをカテゴリ変数として扱い (カテゴリ変数のプロット)、デフォルトでカテゴリごとに 1 つの目盛りを配置し、それらが提供された順序でプロットします。これが望ましくない場合の解決策は、次の例のように文字列を数値型に変換することです。

例 1: 文字列は、数値ティックの予期しない順序につながる可能性があります#

import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots(1, 2, constrained_layout=True, figsize=(6, 2.5))
x = ['1', '5', '2', '3']
y = [1, 4, 2, 3]
ax[0].plot(x, y, 'd')
ax[0].tick_params(axis='x', color='r', labelcolor='r')
ax[0].set_xlabel('Categories')
ax[0].set_title('Ticks seem out of order / misplaced')

# convert to numbers:
x = np.asarray(x, dtype='float')
ax[1].plot(x, y, 'd')
ax[1].set_xlabel('Floats')
ax[1].set_title('Ticks as expected')
目盛の順序が間違っている / 配置が間違っているように見える、目盛は予想どおり
Text(0.5, 1.0, 'Ticks as expected')

例 2: 文字列は非常に多くのティックにつながる可能性があります#

xに 100 個の要素があり、すべてが文字列の場合、100 個の (読み取り不能な) ティックがあり、解決策は文字列を float に変換することです。

fig, ax = plt.subplots(1, 2, figsize=(6, 2.5))
x = [f'{xx}' for xx in np.arange(100)]
y = np.arange(100)
ax[0].plot(x, y)
ax[0].tick_params(axis='x', color='r', labelcolor='r')
ax[0].set_title('Too many ticks')
ax[0].set_xlabel('Categories')

ax[1].plot(np.asarray(x, float), y)
ax[1].set_title('x converted to numbers')
ax[1].set_xlabel('Floats')
ティック数が多すぎます。x は数値に変換されます
Text(0.5, -3.555555555555568, 'Floats')

例 3: 文字列は、datetime ティックの予期しない順序につながる可能性があります#

一般的なケースは、日付が CSV ファイルから読み取られる場合です。適切な日付ロケーターとフォーマッターを取得するには、文字列から datetime オブジェクトに変換する必要があります。

fig, ax = plt.subplots(1, 2, constrained_layout=True, figsize=(6, 2.75))
x = ['2021-10-01', '2021-11-02', '2021-12-03', '2021-09-01']
y = [0, 2, 3, 1]
ax[0].plot(x, y, 'd')
ax[0].tick_params(axis='x', labelrotation=90, color='r', labelcolor='r')
ax[0].set_title('Dates out of order')

# convert to datetime64
x = np.asarray(x, dtype='datetime64[s]')
ax[1].plot(x, y, 'd')
ax[1].tick_params(axis='x', labelrotation=90)
ax[1].set_title('x converted to datetimes')

plt.show()
日付の順序が正しくありません。x は日時に変換されます

スクリプトの合計実行時間: ( 0 分 1.403 秒)

Sphinx-Gallery によって生成されたギャラリー