from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
import matplotlib.ticker as ticker
import numpy as np
class plottingCanvas(FigureCanvas):
def __init__(self, parent=None, width=5, height=4, dpi=100):
fig = Figure(figsize=(width, height), dpi=dpi)
self.axes = fig.add_subplot(111)
super(plottingCanvas, self).__init__(fig)
fig.tight_layout()
canvas = plottingCanvas(self, width=5, height=4, dpi=100)
canvas.axes.yaxis.grid(True, linestyle='--')
ylabel = np.array([0.000002, 0.00001, 0.00002, 0.0001, 0.0002, 0.001, 0.002, 0.005, 0.01, 0.05, 0.1, 0.2])
canvas.axes.yaxis.set_ticks(ylabel)
ticker = matplotlib.ticker.EngFormatter(unit='V')
canvas.axes.yaxis.set_major_formatter(ticker)
canvas.axes.set_ylim(ymin=0.000002, ymax=0.200)
canvas.draw()
上面是代码,其中y轴表示电压值,范围从uV到mV。通过上面的代码,我得到了如下的曲线图:
我甚至尝试了下面的代码,但没有运气。
canvas.axes.yaxis.set_ticks(np.arange(ylabel))
canvas.axes.yaxis.set_set_ticklabels(ylabel)
有人可以帮助在获得等间距的y轴尺度。
谢谢.
期望等间距的y轴比例如上图所示。
1条答案
按热度按时间zzwlnbp81#
TL;DR:你在应该设置yticks的时候设置了ylabel。
您的新图像仍然不一致(除非您使用对数标度或类似)。您不能有2uV -> 10 uV等,您需要有2 uV -> 4 uV等。
你给出的代码中也有两个错误:
canvas = plottingCanvas(self, width=5, height=4, dpi=100)
不应该包含self
。ticker = matplotlib.ticker.EngFormatter(unit='V')
不应该包含matplotlib
,因为您已经使用了import matplotlib.ticker as ticker
。我不熟悉
backend_qt5agg
,我将给予一个例子,下面使用常规图,它应该直接转换。假设图的值是x和y,其中x是一个系列,y是一个系列,第三个值是步长值。
yticks(np.arange(min(y), max(y)+1, 3.0))
注意:最小值和最大值可以手动设置。例如,如果您喜欢将200 uV作为上限,则:
yticks(np.arange(0, 201, 1.0))
范例:
给定例子中的一系列值-最小值为0.000002,最大值为0.2 -将这些值舍入是有意义的。当与0.2或0.05比较时,0.000002和0.00001之间有什么区别吗?它们可能在功能上为零。