2017-06-02 57 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×10^0和4×10^0標籤重疊。

如果我做圖中的「semilogy」,通過降低

ax1.set_xscale('log') 

線,例如,從下面的圖片中可以看出這不會發生: semil

這是爲什麼發生以及如何解決?

+1

那些額外的標籤來自較小的標籤。你需要在軸上強制執行'matplotlib.ticker.NullFormatter()',參見[重複問題](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的答案非常有啓發性。我正在看到格式化代碼的全新可能性。 –