2017-06-02 5 views
2

私のシステム上で次の最小限の作業例(Pythonの3.5.3、matplotlibの2.0.2)は、コードスニペットを次の画像につながる:設定xticks

import matplotlib.ticker 
from matplotlib import pyplot as plt 

npts = [2.0, 4.0, 6.0, 8.0, 10.0, 12.0, 14.0, 16.0] 
error = [0.0005650356236921, 1.9222448391e-06, 1.05166913e-08, 
     6.92182e-11, 5.029e-13, 3.8e-15, 4e-16, 2e-16] 

fig1, ax1 = plt.subplots() 
ax1.plot(npts, error , 'ro') 

ax1.set_xscale('log') 
ax1.set_yscale('log') 

ax1.set_xticks(npts) 
ax1.get_xaxis().set_major_formatter(matplotlib.ticker.ScalarFormatter()) 
plt.show() 

loglog plot with some unwanted xtick labels

ラベル3 x 10^0はまったく存在してはならないことに注意してください。また、2と4のラベルは、不要な2 x 10^0ラベルと4 x 10^0ラベルで重複しています。

下の画像からわかるように、私は、例えば、

ax1.set_xscale('log') 

ラインをドロップすることで、プロット「semilogyの」を作る場合、これは発生しません: semil

これである理由起こっているとどのように解決することができますか?

+1

これらの追加のラベルは、小目盛りのラベルから来ています。 Axesに 'matplotlib.ticker.NullFormatter()'を強制する必要があります。[duplicate question](https://stackoverflow.com/questions/42845694/matplotlib-setting-x-limits-also-forces-tick)を参照してください。 - ラベル)の答え。 – ImportanceOfBeingErnest

+0

@ImportanceOfBeingErnest:ありがとうございます。私はStackoverflowで多くの検索をしましたが、リンク先の質問は見つかりませんでした。 matplotlib.ticker.NullFormatter()を強制すると問題が解決されることを確認します。私は困惑している。 matplotlib 1.5.xから2.0.yへのこの動作の変更は、直感的ではありません。なぜこれが導入されたのか? – Omid

答えて

0

この行は必要ありませんax1.set_xscale('log')。その理由は、データポイントが対数でないからです。

+1

これは質問に答えません。 –

+0

@Oluwafemi Sule:データポイント(x、y)の任意のセットは、目的に応じて異なるグラフを使用して表現できます。 (x、y)点を直接グラフにすることができます。 xがfの領域にあり、yがgの領域にある限り、(f(x)、g(y))をグラフにすることができます。私の場合、私はf:= logとg:= logを持っています。データはまさにそのデータです。それを表現し解釈する方法を選択します。 – Omid

+0

@Omidあなたが正しいです。 ImportanceOfBeingErnestの答えは本当に啓発されています。私はテロップを整形することでまったく新しい可能性を見ている。 –

関連する問題