很多时候我们想对一个数据画图,这个数据的图的形状是我们需要的,但是y轴的刻度不对,可能大了或者小了,我们想不改变这个数据的分布和形状画出来的图的情况下,对这个数据进行一定程度的缩放,可以按照下面的方法来。
先导入包
import numpy as np
import matplotlib.pyplot as plt
我们先生成一组数据
# 生成y的值
x = np.linspace(-5, 5, 100)
y = 2 * x**3 - 3 * x**2 + 4 * x + 1
# 加噪声
noise = np.random.normal(0, 10, size=y.shape)
y_noisy = y + noise
# 绘制图形
plt.figure(figsize=(7,3))
plt.plot(y_noisy)
plt.show()
可以看到数据的折线图,形状大概是这样的。然后查看其取值区间
y_noisy.min(),y_noisy.max()
最小值和最大值的情况,y在这个区间里面,然后我们需要进行映射到另外一个区间里面去。
映射公式
gpt告诉我的,很对,然后我把他写的代码改了一下,成为了下面这个缩放函数。
def Linear_transformation(y,interval=[-3,3]):
y=np.array(y)
y_min = y.min() ; y_max = y.max()
a = interval[0] ; b = interval[-1]
y_new = (b-a)*(y-y_min)/(y_max-y_min)+a
return y_new
# 假设y要映射到(-5,5)
y_new=Linear_transformation(y_noisy,interval=[-5,5])
y_new
画图查看
plt.figure(figsize=(7,3))
plt.plot(y_new)
plt.show()
可以很清楚的看到,数据明显形状和原来是一模一样的,但是y轴变了,变成了-5到5的区间里面了。
想放大也是可以的,比如放大到-1000到1000里面去
plt.figure(figsize=(7,3))
plt.plot(Linear_transformation(y_noisy,interval=[-1000,1000]))
plt.show()
很好用。这样再也不用担心画图的时候数据范围不对的问题了......