間隔 - python xticks




matplotlibのx軸またはy軸の "tick frequency"を変更しますか? (6)

plt.xticks目盛りを付ける場所を明示的に設定することができます:

plt.xticks(np.arange(min(x), max(x)+1, 1.0))

例えば、

import numpy as np
import matplotlib.pyplot as plt

x = [0,5,9,10,15]
y = [0,1,2,3,4]
plt.plot(x,y)
plt.xticks(np.arange(min(x), max(x)+1, 1.0))
plt.show()

min(x)max(x)がintではなくfloatの場合にのみ、 np.arangeがPythonのrange関数ではなく使用されていました)。

plt.plot (またはax.plot )関数はデフォルトのxy制限を自動的に設定します。 これらの制限を維持し、目盛りのステップサイズを変更したい場合は、 ax.get_xlim()を使用して、Matplotlibが既に設定した制限を発見することができます。

start, end = ax.get_xlim()
ax.xaxis.set_ticks(np.arange(start, end, stepsize))

デフォルトの目盛りフォーマッタは、有効な有効数字の目盛り値を丸める適切な仕事をする必要があります。 ただし、フォーマットをより詳細に制御したい場合は、独自のフォーマッターを定義することができます。 例えば、

ax.xaxis.set_major_formatter(ticker.FormatStrFormatter('%0.1f'))

実行可能な例を次に示します。

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker

x = [0,5,9,10,15]
y = [0,1,2,3,4]
fig, ax = plt.subplots()
ax.plot(x,y)
start, end = ax.get_xlim()
ax.xaxis.set_ticks(np.arange(start, end, 0.712123))
ax.xaxis.set_major_formatter(ticker.FormatStrFormatter('%0.1f'))
plt.show()

私はpythonが私のデータをプロットする方法を修正しようとしています。

いう

x = [0,5,9,10,15]

そして

y = [0,1,2,3,4]

それから私はやるだろう:

matplotlib.pyplot.plot(x,y)
matplotlib.pyplot.show()

x軸の目盛は5の間隔でプロットされています。1の間隔を表示する方法はありますか?


これはちょっとハッキリですが、これを行うために私が見つけた例をはるかにきれいに/最も簡単に理解することができます。 それはここの答えからです:

matplotlibカラーバーのn番目のティックラベルをすべて隠す最もクリーンな方法は?

for label in ax.get_xticklabels()[::2]:
    label.set_visible(False)

次に、ラベルを目的の密度に応じて表示または非表示に設定することができます。

edit:matplotlibがラベル== ''設定することがあるので、実際には何も表示していないときにラベルが存在しないように見えるかもしれないことに注意してください。 実際に表示されているラベルをループしていることを確認するには、

visible_labels = [lab for lab in ax.get_xticklabels() if lab.get_visible() is True and lab.get_text() != '']
plt.setp(visible_labels[::2], visible=False)

もう1つの方法は、軸ロケータを設定することです。

import matplotlib.ticker as plticker

loc = plticker.MultipleLocator(base=1.0) # this locator puts ticks at regular intervals
ax.xaxis.set_major_locator(loc)

あなたのニーズに応じて、いくつかの異なるタイプのロケータがあります。


以下は、正の値、負の値、または混合値を持つ任意の数値系列(intまたはfloat)を処理する、目的の機能の純粋なPython実装です。

def computeTicks (x, step = 5):
    """
    Computes domain with given step encompassing series x
    @ params
    x    - Required - A list-like object of integers or floats
    step - Optional - Tick frequency
    """
    import math as Math
    xMax, xMin = Math.ceil(max(x)), Math.floor(min(x))
    dMax, dMin = xMax + abs((xMax % step) - step) + (step if (xMax % step != 0) else 0), xMin - abs((xMin % step))
    return range(dMin, dMax, step)

サンプル出力:

# Negative to Positive
series = [-2, 18, 24, 29, 43]
print(list(computeTicks(series)))

[-5, 0, 5, 10, 15, 20, 25, 30, 35, 40, 45]

# Negative to 0
series = [-30, -14, -10, -9, -3, 0]
print(list(computeTicks(series)))

[-30, -25, -20, -15, -10, -5, 0]

# 0 to Positive
series = [19, 23, 24, 27]
print(list(computeTicks(series)))

[15, 20, 25, 30]

# Floats
series = [1.8, 12.0, 21.2]
print(list(computeTicks(series)))

[0, 5, 10, 15, 20, 25]

# Step – 100
series = [118.3, 293.2, 768.1]
print(list(computeTicks(series, step = 100)))

[100, 200, 300, 400, 500, 600, 700, 800]

サンプル使用法:

import matplotlib.pyplot as plt

x = [0,5,9,10,15]
y = [0,1,2,3,4]
plt.plot(x,y)
plt.xticks(computeTicks(x))
plt.show()

私はこのソリューションが好きです( Matplotlib Plotting Cookbookから ):

import matplotlib.pyplot as plt
import matplotlib.ticker as ticker

x = [0,5,9,10,15]
y = [0,1,2,3,4]

tick_spacing = 1

fig, ax = plt.subplots(1,1)
ax.plot(x,y)
ax.xaxis.set_major_locator(ticker.MultipleLocator(tick_spacing))
plt.show()

このソリューションはticker.MultipleLocater()与えられた番号を使ってティックスペーシングを明示的に制御し、自動制限判定を可能にし、後で読むのが簡単です。


誰かが一般的な1ライナーに興味がある場合は、現在のダニを取得し、それを使用して、他のすべてのダニをサンプリングすることによって、新しいダニを設定します。

ax.set_xticks(ax.get_xticks()[::2])




matplotlib