科研绘图比赛¶

Author: 陈浩

学号: 2024200770

Blog: https://bookpen.github.io/Gallery/sciplot-competition.html

In [1]:
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import plotly.express as express
import plotly.graph_objects as go
# 读取CSV
data1 = pd.read_csv('dataset1.csv')
data2 = pd.read_csv('dataset2.csv')
data3_1 = pd.read_csv('dataset3(1).csv')
data3_2 = pd.read_csv('dataset3(2).csv')
data4 = pd.read_csv('dataset4.csv',header=None).astype(np.float16)
data5 = pd.read_csv('dataset5.csv')
data6 = pd.read_csv('dataset6.csv')

数据集1¶

dataset1是一个随机生成的二维高斯噪声。分别从横纵轴画出小提琴图,均展现出高斯分布的特性。

In [2]:
fig = express.scatter(data1, x="X",y="Y",marginal_x="violin",marginal_y="violin")
fig.show()

数据集2¶

dataset2是机械臂末端可以到达的所有点的空间分布,即一堆的三维点集合,从结果上看,有点像“杨桃”。

In [3]:
data2_ = data2.sample(n=10000,random_state=2024200770).astype(np.float32)
fig = express.scatter_3d(data2_, x="X",y="Y",z="Z",color="Z")
fig.update_layout(coloraxis_showscale=False)
fig.show()
fig.write_html("plot.html")

数据集3¶

dataset3是两种算法分别重复运行10次的结果。当然,画十张图显然不合适。为了展示算法的可复现性,每一个算法的十次复现均画在同一张图,并使用相同色调但是不同深度的颜色进行绘制。两种算法分别使用蓝色和红色区分。

In [4]:
for i in range(1,11):
    if i!=10:
        plt.plot(data3_1["run_{}".format(i)],color=(0,0,i/10))
    else:
        plt.plot(data3_1["run_{}".format(i)],color=(0,0,i/10),label="algorithm 1")

for i in range(1,11):
    if i!=10:
        plt.plot(data3_2["run_{}".format(i)],color=(i/10,0,0))
    else:
        plt.plot(data3_2["run_{}".format(i)],color=(i/10,0,0),label="algorithm 2")
plt.legend();
No description has been provided for this image

数据集4¶

dataset4是热力学图,最简单的方式就是画成二维的热力学图。也可以画成三维的。

In [5]:
plt.imshow(data4.to_numpy())
fig = go.Figure(go.Surface(z = data4.to_numpy()))
fig.show()
fig.write_html("dataset4.html");
No description has been provided for this image

数据集5¶

dataset5三种算法在不同数据集的性能对比。有点纠结,因为绘制表格想过用word、想过用markdown、想过用Excel,就是没想过用python绘制。

In [24]:
data5
Out[24]:
accuracy dataset1 dataset2 dataset3
0 Model1 0.98 0.75 0.60
1 Model2 0.95 0.82 0.65
2 Model3 0.99 0.70 0.58

数据集6¶

dataset6是三种时序预测算法的预测值曲线,只能说预测的挺好的。

In [6]:
plt.plot(data6["Time"], data6["Actual"], label="Ground True", color=(1,0.5,1,0.2))
plt.plot(data6["Time"], data6["LSTM"], label="LSTM", color=(1,0,0))
plt.plot(data6["Time"], data6["Transformer"], label="Transformer", color=(0,1,0))
plt.plot(data6["Time"], data6["TCN"], label="TCN", color=(0,0,1))
plt.legend();
No description has been provided for this image