650

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

言う

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

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

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

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

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

4

13 に答える 13

778

目盛りを付けたい場所を明示的に設定できます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()

(念のためPythonの関数でnp.arangeはなく使用され、intではなくfloatです。)rangemin(x)max(x)


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

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()
于 2012-09-26T19:24:08.597 に答える
170

私はこのソリューションが好きです(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()、自動制限決定を可能にし、後で簡単に読み取ることができます。

于 2016-03-25T23:24:37.790 に答える
17

これは古いトピックですが、私は時々これに出くわし、この機能を作成しました。とても便利です:

import matplotlib.pyplot as pp
import numpy as np

def resadjust(ax, xres=None, yres=None):
    """
    Send in an axis and I fix the resolution as desired.
    """

    if xres:
        start, stop = ax.get_xlim()
        ticks = np.arange(start, stop + xres, xres)
        ax.set_xticks(ticks)
    if yres:
        start, stop = ax.get_ylim()
        ticks = np.arange(start, stop + yres, yres)
        ax.set_yticks(ticks)

このようにティックを制御する場合の 1 つの注意点は、行を追加した後の最大スケールのインタラクティブな自動更新を楽しめなくなることです。それからする

gca().set_ylim(top=new_top) # for example

resadjust 関数を再度実行します。

于 2014-12-17T19:18:45.353 に答える
13

私は洗練されていないソリューションを開発しました。X 軸と、X の各点のラベルのリストがあるとします。

例:
import matplotlib.pyplot as plt

x = [0,1,2,3,4,5]
y = [10,20,15,18,7,19]
xlabels = ['jan','feb','mar','apr','may','jun']
「feb」と「jun」のみの目盛りラベルを表示したいとしましょう
xlabelsnew = []
for i in xlabels:
    if i not in ['feb','jun']:
        i = ' '
        xlabelsnew.append(i)
    else:
        xlabelsnew.append(i)
よし、これで偽のラベルのリストができた。まず、元のバージョンをプロットしました。
plt.plot(x,y)
plt.xticks(range(0,len(x)),xlabels,rotation=45)
plt.show()
さて、修正版。
plt.plot(x,y)
plt.xticks(range(0,len(x)),xlabelsnew,rotation=45)
plt.show()
于 2015-03-11T13:26:52.810 に答える
4

上記のソリューションはどれNoneも私のユースケースでは機能しなかったため、ここでは、さまざまなシナリオに適応できる (駄洒落!) を使用したソリューションを提供します。

X以下は、とY軸の両方で雑然とした目盛りを生成するサンプル コードです。

# Note the super cluttered ticks on both X and Y axis.

# inputs
x = np.arange(1, 101)
y = x * np.log(x) 

fig = plt.figure()     # create figure
ax = fig.add_subplot(111)
ax.plot(x, y)
ax.set_xticks(x)        # set xtick values
ax.set_yticks(y)        # set ytick values

plt.show()

ここで、x 軸と y 軸の両方でまばらな値のセットのみを目盛りとして表示する新しいプロットで混乱を解消します。

# inputs
x = np.arange(1, 101)
y = x * np.log(x)

fig = plt.figure()       # create figure
ax = fig.add_subplot(111)
ax.plot(x, y)

ax.set_xticks(x)
ax.set_yticks(y)

# which values need to be shown?
# here, we show every third value from `x` and `y`
show_every = 3

sparse_xticks = [None] * x.shape[0]
sparse_xticks[::show_every] = x[::show_every]

sparse_yticks = [None] * y.shape[0]
sparse_yticks[::show_every] = y[::show_every]

ax.set_xticklabels(sparse_xticks, fontsize=6)   # set sparse xtick values
ax.set_yticklabels(sparse_yticks, fontsize=6)   # set sparse ytick values

plt.show()

ユースケースに応じて、show_everyX または Y または両方の軸の目盛り値をサンプリングするためにそれを変更して使用するだけで、上記のコードを適応させることができます。

このステップサイズ ベースのソリューションが適合しない場合、必要に応じてsparse_xticksまたはの値をsparse_yticks不規則な間隔で入力することもできます。

于 2020-07-06T12:43:31.803 に答える