我正在尝试绘制均具有x值(名义上)对称范围(例如2-> 0-> -2-> 0-> 2)的磁滞回线。

但是,由于磁铁电源的微小变化,有时起始值和最终值并非精确地为+/- 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,因为我在一个循环中绘制了大量图形,每个图形都有不同的范围。

干杯。

最佳答案

为特定的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()

关于python - x轴上的刻度标签不对称(Matplotlib),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20519241/

10-12 22:31