问题描述
x方向范围是(0,60)有21个点,y方向范围是(-3,3)有3个点,load的形状为(21,3),每个load的值为这些位置上的载荷值,并且载荷值跟x有函数关系f=10+x^2,做出载荷谱。
代码
import matplotlib.pyplot as plt
import numpy as np
# 根据指定的函数计算载荷值
def load_function(x):
return 10 + x ** 2
# 创建x和y坐标的网格
# x = np.arange(21)
# y = np.arange(3)
x = np.linspace(0, 60, 21)
y = np.linspace(-3, 3, 3)
xx, yy = np.meshgrid(x, y)
# import pdb
# pdb.set_trace()
# 计算载荷值
load = load_function(xx)
# 在新的matplotlib窗口中绘制数组
plt.close("all")
fig, ax = plt.subplots() # fig = <Figure size 640x480 with 1 Axes>
# 显示载荷值的图像
im = ax.imshow(load, cmap='viridis', origin='lower')
# 添加色标
fig.colorbar(im, ax=ax, label='Sum of Z Values')
# 设置标签
ax.set_xlabel('X')
ax.set_ylabel('Y')
# 设置x和y轴的数值,x=(0, 60),y=(-3, 3),如果想要x从0-20显示x则不需要这几段代码
ax.set_xticks(range(0, len(x)))
ax.set_yticks(range(0, len(y)))
ax.set_xticklabels(map(int, x))
ax.set_yticklabels(map(int, y))
# 保存图像,必须在plt.show()之前调用保存图像,否则图像被清空了
plt.savefig("true_load_plotting_1.png", dpi=300)
# 展示图像
plt.show()
'''
import matplotlib.pyplot as plt
import numpy as np
# 假设你已经创建了名为`action`的(1,21,3)维度的数组
# 注意,这里为了演示,我将创建一个随机数组。你的实际数组应从你的算法或数据获得。
action = np.random.rand(1, 21, 3)
# 用上述代码进行可视化
# 首先关闭现有的图像
plt.close("all")
# 然后创建新的图像
fig, ax = plt.subplots()
# 将行动值的形状调整为21x3,并使用颜色图显示图像
im = ax.imshow(action.reshape(21, 3), cmap='viridis', interpolation='spline16', origin='lower')
# 添加颜色条
fig.colorbar(im, ax=ax, label='Sum of Z Values')
# 设置标签
ax.set_xlabel('X')
ax.set_ylabel('Y')
# 展示图像
plt.show()
'''
代码解释
import matplotlib.pyplot as plt
import numpy as np
上面的这两行是Python的常见导入。我们需要matplotlib.pyplot
来画出我们的数据图,numpy
则是用于浮点范围和数组。
def load_function(x):
return 10 + x**2
这个函数定义了用于生成载荷值的公式。它接收一个值x,并返回一个值,这个值是10+x²。
x = np.linspace(0, 60, 21)
y = np.linspace(-3, 3, 3)
xx, yy = np.meshgrid(x, y)
这部分代码创建了一个坐标网格。np.linspace(a, b, c)在a和b之间创建了c个等距的值。np.meshgrid(x, y)
会返回一个坐标矩阵,为我们在这个矩阵上为每个x和y组合产生一个载荷值。
action = load_function(xx)
这句代码将我们的载荷函数应用在了所有的x值上。结果会形成一个二维数组,这个数组和我们的坐标网格有着相同的形状。
plt.close("all")
fig, ax = plt.subplots()
plt.close("all")
确保了之前打开的其他图形窗口都被关闭,以便我们的新图形显示。plt.subplots()
返回一个图形对象和一个轴对象,用于创建和定制我们的图形。
im = ax.imshow(action, cmap='viridis', origin='lower')
ax.imshow(data, cmap, origin)
显示一个数据数组。我们在这里使用数据矩阵action
,颜色映射(cmap
)是'viridis'(这是一种渐变的颜色映射,它可以用颜色强度来表示数值的大小),并设置origin='lower'
使得图像的原点在左下角。
fig.colorbar(im, ax=ax, label='Sum of Z Values')
这行代码添加了一个色标,这是一个解释色彩映射与数值关系的工具。
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_xticks(range(0, len(x)))
ax.set_yticks(range(0, len(y)))
ax.set_xticklabels(map(int, x))
ax.set_yticklabels(map(int, y))
这个部分设置了x轴和y轴的标签以及刻度。我们使用set_xticks()
和set_yticks()
来设置轴的刻度位置。set_xticklabels()
和set_yticklabels()
设置了每个刻度的标签。在这里,我们设置了标签以使它们表示了x和y的实际值,而不只是矩阵的索引。
plt.show()
最后,plt.show()
命令将图形展示出来。matplotlib使用一个"当前图形"的概念,即你创建的最近一个图形或子图。plt.show()
显示了这个"当前的图形"。