您好,尝试根据计算的最小值和最大值使变量y(或x)轴刻度线。这是我到目前为止尝试过的:
ymin = (round((min(ECG_Data)), 1))
ymax = (round((max(ECG_Data)), 1))
..
plt.ylim(ymin - 0.05, ymax + 0.05)
plt.yticks(np.arange(ymin - 0.1, ymax + 0.2, step = 0.1))
示例1
最低值约为-0.38,最低刻度为-0.4,这很好。但是最高值在0.9以上,并且刻度线停在0.9,这是我不希望的。
示例2:
完美的示例,但是正如您在上面的代码中看到的那样,我在ylim&yticks中使用了硬编码-和+值,仅适用于该特定图形。
(如果我不在plt.yticks中使用数字值,则上下刻度都丢失了,例如缺少最高刻度的示例1)
如何制作带有可变刻度的可变轴?每次使用最小值和最大值来确定最低和最高刻度。
感谢您与我一起思考/帮助我!
答案 0 :(得分:0)
这是因为np.arange
是半开放时间间隔。因此,它不包含您想要的ymax
。如果您想关闭间隔,可以尝试
np.linspace(start = ymin, stop = ymax, num = (ymax - ymin)/0.1)
答案 1 :(得分:0)
一种使这种方式更具动态性的方法可以是根据数据的最小值和最大值计算yrange
,然后根据该值得出yticks
。例如
from math import floor, ceil
import numpy as np
import matplotlib.pyplot as plt
data = np.random.rand(100,)*1.5 - 0.4 # generate some toy data
add_percent = 10
round_to_decimal = 1 # n decimal places, e.g. 2 would mean round to 2nd dec place
ymax, ymin = data.max(), data.min()
offset = (abs(ymin)+abs(ymax))/2 * add_percent/100
yrange = (floor((ymin - offset)*10**round_to_decimal)/10**round_to_decimal,
ceil((ymax + offset)*10**round_to_decimal)/10**round_to_decimal)
STEP = 0.1 # step=.1 is a bit arbitrary, depends on your data
yticks = np.arange(yrange[0], yrange[1]+STEP, step=STEP)
# same as: np.linspace(*yrange, num=np.ptp(yrange)/STEP+1)
fig, ax1 = plt.subplots()
ax1.plot(data)
ax1.set_ylim(yrange)
ax1.set_yticks(yticks)