tf好朋友之matplotlib的使用——连续图像部分plt.plot

tf好朋友之matplotlib的使用——连续图像部分plt.plot

学了这么多机器学习,好像还不知道这么去展示我的学习成果……
在这里插入图片描述
一想到matlab里面有这么多好用的plot,其实python里也有!

连续图像常用函数及其作用

plt.plot()

plt.plot(
	x,
	y,
	format_string,
	**kwargs) 

其中**kwargs包含常用的参数:

color #颜色 
linestyle #线条样式 
linewidth #线宽
marker #标记风格 
markerfacecolor #标记颜色 
markersize #标记大小等等 

应用示例:

# 颜色红,线宽1,线的样式为'-',标记的风格为'.'
plt.plot(x,y2,color = 'red',linewidth = 1.0,linestyle = '--',marker = '.')
plt.plot(x,y2,'r--.',linewidth = 1.0)
# 二者作用一样

matplotlib常用的颜色指定方法有:、
1、在[0, 1]中的浮点值的RGB或RGBA元组(例如 (0.1, 0.2, 0.5) 或 (0.1, 0.2, 0.5, 0.3))。RGBA是红色,绿色,蓝色,Alpha的缩写;
2、十六进制RGB或RGBA字符串 (例如: ‘#0F0F0F’ 或者 ‘#0F0F0F0F’);
3、[0, 1]中浮点值的字符串表示,包括灰度级(例如,‘0.5’);
4、单字母字符串,例如这些其中之一:{‘b’, ‘g’, ‘r’, ‘c’, ‘m’, ‘y’, ‘k’, ‘w’};
5、一个 X11/CSS4 (“html”) 颜色名称, 例如:“blue”,具体可选取颜色可参考https://matplotlib.org/gallery/color/named_colors.html
6、来自xkcd的颜色调研的名称,前缀为 ‘xkcd:’ (例如:“xkcd:sky blue”),指定颜色教程可参考https://matplotlib.org/tutorials/colors/colors.html
7、其中一个 {‘tab:blue’, ‘tab:orange’, ‘tab:green’, ‘tab:red’, ‘tab:purple’, ‘tab:brown’, ‘tab:pink’, ‘tab:gray’, ‘tab:olive’, ‘tab:cyan’},它们是’tab10’分类调色板中的Tableau颜色(这是默认的颜色循环);

matplotlib常用的linestyle有:
(图片取自官方文档)
在这里插入图片描述
matplotlib常用的marker有:
1、’.’:点标记
2、’,’:像素标记
3、‘o’:实心圆标记
4、‘v’:倒三角标记
5、’^’:上三角标记
6、’>’:右三角标记
7、’<’:左三角标记
8、’*’:星形标记
9、‘x’:x形标记
10、‘s’:实心方形标记
11、‘p’:实心五角标记

plt.figure()

plt.figure(
	num=None,
	figsize=None, 
	dpi=None, 
	facecolor=None, 
	edgecolor=None, 
	frameon=True)

各个参数的意义是:

num 		#图像的编号或者名称,当其为数字时是编号,当其为字符串时是名称 
figsize		#指定figure的宽和高 
dpi			#参数指定绘图对象的分辨率
facecolor	#背景颜色
edgecolor	#边框颜色 
frameon		#是否显示边框

其常用于建立多个独立的图像:
应用示例:

# 颜色红,线宽1,线的样式为'-',标记的风格为'.'
plt.plot(x,y2,color = 'red',linewidth = 1.0,linestyle = '--',marker = 'o')
plt.plot(x,y2,'r--.',linewidth = 1.0)
# 二者作用一样

plot()应用示例

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-1,1,50)
y1 = 2*x + 1
y2 = x**2

plt.figure(num=1,figsize=(4,5))
plt.plot(x,y1,color = 'red',linewidth = 1.0,linestyle = '--',marker = '.')

plt.figure(num=2,figsize=(8,5))
plt.plot(x,y1)
plt.plot(x,y2,'r--.',linewidth = 1.0)

plt.show()
import pandas as pd import numpy as np import matplotlib.pyplot as plt import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import LSTM, Dense data = pd.read_csv('车辆:274序:4结果数据.csv') x = data[['车头间距', '原车道前车速度']].values y = data['本车速度'].values train_size = int(len(x) * 0.7) test_size = len(x) - train_size x_train, x_test = x[0:train_size,:], x[train_size:len(x),:] y_train, y_test = y[0:train_size], y[train_size:len(y)] from sklearn.preprocessing import MinMaxScaler scaler = MinMaxScaler(feature_range=(0, 1)) x_train = scaler.fit_transform(x_train) x_test = scaler.transform(x_test) model = Sequential() model.add(LSTM(50, input_shape=(2, 1))) model.add(Dense(1)) model.compile(loss='mean_squared_error', optimizer='adam') history = model.fit(x_train.reshape(-1, 2, 1), y_train, epochs=100, batch_size=32, validation_data=(x_test.reshape(-1, 2, 1), y_test)) plt.plot(history.history['loss']) plt.plot(history.history['val_loss']) plt.title('Model loss') plt.ylabel('Loss') plt.xlabel('Epoch') plt.legend(['Train', 'Test'], loc='upper right') plt.show() train_predict = model.predict(x_train.reshape(-1, 2, 1)) test_predict = model.predict(x_test.reshape(-1, 2, 1)) train_predict = scaler.inverse_transform(train_predict) train_predict = train_predict.reshape(-1) # 将结果变为一维数组 y_train = scaler.inverse_transform(y_train.reshape(-1, 1)).reshape(-1) # 将结果变为一维数组 test_predict = scaler.inverse_transform(test_predict) y_test = scaler.inverse_transform([y_test]) plt.plot(y_train[0], label='train') plt.plot(train_predict[:,0], label='train predict') plt.plot(y_test[0], label='test') plt.plot(test_predict[:,0], label='test predict') plt.legend() plt.show()报错Traceback (most recent call last): File "C:\Users\马斌\Desktop\NGSIM_data_processing\80s\lstmtest.py", line 42, in <module> train_predict = scaler.inverse_transform(train_predict) File "D:\python\python3.9.5\pythonProject\venv\lib\site-packages\sklearn\preprocessing\_data.py", line 541, in inverse_transform X -= self.min_ ValueError: non-broadcastable output operand with shape (611,1) doesn't match the broadcast shape (611,2)
05-25
这个错误发生在将归一化后的预测结果进行逆归一化时。根据错误提示,训练集的预测结果和真实值的形状为 (611,),而测试集的预测结果和真实值的形状为 (1, 611)。这是因为在进行逆归一化时,要求预测结果和真实值的形状必须一致,即都为一维数组。 你可以将 y_test 的形状改为 (611,),方法是将 y_test 的数据类型从二维数组转换为一维数组,就像对 y_train 做的那样。修改后的代码如下: ```python import pandas as pd import numpy as np import matplotlib.pyplot as plt import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import LSTM, Dense data = pd.read_csv('车辆:274序:4结果数据.csv') x = data[['车头间距', '原车道前车速度']].values y = data['本车速度'].values train_size = int(len(x) * 0.7) test_size = len(x) - train_size x_train, x_test = x[0:train_size,:], x[train_size:len(x),:] y_train, y_test = y[0:train_size], y[train_size:len(y)] from sklearn.preprocessing import MinMaxScaler scaler = MinMaxScaler(feature_range=(0, 1)) x_train = scaler.fit_transform(x_train) x_test = scaler.transform(x_test) model = Sequential() model.add(LSTM(50, input_shape=(2, 1))) model.add(Dense(1)) model.compile(loss='mean_squared_error', optimizer='adam') history = model.fit(x_train.reshape(-1, 2, 1), y_train, epochs=100, batch_size=32, validation_data=(x_test.reshape(-1, 2, 1), y_test)) plt.plot(history.history['loss']) plt.plot(history.history['val_loss']) plt.title('Model loss') plt.ylabel('Loss') plt.xlabel('Epoch') plt.legend(['Train', 'Test'], loc='upper right') plt.show() train_predict = model.predict(x_train.reshape(-1, 2, 1)) test_predict = model.predict(x_test.reshape(-1, 2, 1)) train_predict = scaler.inverse_transform(train_predict) train_predict = train_predict.reshape(-1) # 将结果变为一维数组 y_train = scaler.inverse_transform(y_train.reshape(-1, 1)).reshape(-1) # 将结果变为一维数组 test_predict = scaler.inverse_transform(test_predict) y_test = scaler.inverse_transform(y_test.reshape(-1, 1)).reshape(-1) # 将结果变为一维数组 plt.plot(y_train, label='train') plt.plot(train_predict, label='train predict') plt.plot(y_test, label='test') plt.plot(test_predict, label='test predict') plt.legend() plt.show() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bubbliiiing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值