2013-12-11 193 views
1

我試圖繪製所有x值(名義上)對稱範圍(2 - > 0 - > -2 - > 0 - > 2,例如)。x軸上的刻度標籤不是對稱的(Matplotlib)

但是,由於磁鐵電源的細微變化,有時起始值和結束值不完全是+/- 2,但可能是-2.01。這意味着我生產的圖不具有對稱的x軸。它可能會從-2.5到2.

有沒有辦法迫使軸對稱於0?我試過matplotlib.ticker.MaxNLocator(symmetric=True),但它似乎沒有工作。

這裏是我的意思的例子:

import pandas as pd 
import numpy as np 
import matplotlib.pyplot as plt 
from pylab import * 
import os, re, glob, io 

fig = plt.figure() 
axes = fig.add_subplot(111) 

matplotlib.ticker.MaxNLocator(symmetric=True) 

upsrt = pd.DataFrame({'DAC3' : pd.Series([-2.1, -1., 0., 1., 2.]), 
         'norm' : pd.Series([5., 3., 6., 8., 2.])}) 

downsrt = pd.DataFrame({'DAC3' : pd.Series([-2., -1., 0., 1., 2.]), 
         'norm' : pd.Series([3., 7., 3., 6., 7.])}) 

upsrt.plot(x='DAC3', y='norm', color='red', label='Up') 

downsrt.plot(x='DAC3', y='norm', color='blue', label='Down') 

plt.show() 

注意兩個DAC3系列不同,最低值爲-2和-2.1這是什麼導致了問題。

此外,我不能強制軸從-2.5到2,因爲我繪製了一個循環中的大量數字,每個都有不同的範圍。

乾杯。

回答

2

設置特定對象axes定位器,然後提供這些axes作爲參數傳遞給DataFrame.plot()

from matplotlib.ticker import MaxNLocator 

fig = plt.figure() 
axes = fig.add_subplot(111) 
axes.xaxis.set_major_locator(MaxNLocator(symmetric=True)) 

upsrt = pd.DataFrame({'DAC3' : pd.Series([-2.1, -1., 0., 1., 2.]), 
         'norm' : pd.Series([5., 3., 6., 8., 2.])}) 

downsrt = pd.DataFrame({'DAC3' : pd.Series([-2., -1., 0., 1., 2.]), 
         'norm' : pd.Series([3., 7., 3., 6., 7.])}) 

upsrt.plot(x='DAC3', y='norm', color='red', label='Up',ax=axes) 

downsrt.plot(x='DAC3', y='norm', color='blue', label='Down', ax=axes) 

plt.show() 
+0

完美工作,非常感謝。 – user3087409

相關問題