matplotlib画图
为什么变化了y1,y2图就不一样。图1:
x1 = np.arange(1600,2200,1)
x2 = np.arange(600,1000,1)
x3 = 1.2
x4 = 150
y1, y2 = np.meshgrid(x1, x2)
...
plt.figure()
plt.subplot(111)
plt.scatter(y1, y2, c=z, cmap=plt.cm.rainbow, vmin=min(z), vmax=max(z))
plt.colorbar()
plt.show()
图2:
x1 = np.arange(1600,2200,1)
x2 = np.arange(600,1000,1)
x3 = 1.2
x4 = 150
y1, y2 = np.meshgrid(x2, x1)
...
plt.figure()
plt.subplot(111)
plt.scatter(y1, y2, c=z, cmap=plt.cm.rainbow, vmin=min(z), vmax=max(z))
plt.colorbar()
plt.show() 根据您提供的代码和描述,可以看出图形不同的原因是因为在两个代码块中交换了 y1 和 y2 的顺序。
在第一个代码块中,您使用了 y1, y2 = np.meshgrid(x1, x2),将 x1 和 x2 组成了网格点 (y1, y2),然后进行绘制。这样得到的图像是将 x1 轴作为横轴,x2 轴作为纵轴,而颜色信息由 z 控制。
在第二个代码块中,您使用了 y1, y2 = np.meshgrid(x2, x1),将 x2 和 x1 组成了网格点 (y1, y2),然后进行绘制。这样得到的图像是将 x2 轴作为横轴,x1 轴作为纵轴,而颜色信息由 z 控制。
因此,两个图形的 x 轴和 y 轴的显示方式发生了变化,导致图形展示不同。
如果您希望两个图形的展示方式一致,需要保持一致的 y1 和 y2 的顺序。可以根据您的需求选择一个代码块,并将另一个代码块注释掉。
希望能解决您的问题!如果还有其他问题,请随时提问。
如果回答对你有帮助,请给我一个最佳答案!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}
问题出在y1和y2的赋值上。在图1中,y1和y2的赋值是通过np.meshgrid(x1, x2)得到的,而在图2中,y1和y2的赋值是通过np.meshgrid(x2, x1)得到的。这两个函数的参数顺序是不同的,导致了y1和y2的值在图1和图2中的排列方式不同。
在图1中,y1的取值范围是从1600到2200,y2的取值范围是从600到1000。而在图2中,y1的取值范围是从600到1000,y2的取值范围是从1600到2200。这就导致了图1中y1和y2的排列方式是以x1为行、x2为列的网格,而图2中y1和y2的排列方式是以x2为行、x1为列的网格。
因此,当你使用plt.scatter绘制散点图时,图1和图2的结果就会不同。在图1中,x轴对应的是y1的取值,y轴对应的是y2的取值;而在图2中,x轴对应的是y2的取值,y轴对应的是y1的取值。
要使得图1和图2的结果一致,你需要保持y1和y2的赋值顺序一致,即使用相同的np.meshgrid(x1, x2)或np.meshgrid(x2, x1)来赋值。 为什么变化了y1, y2图就不一样?
当 y1 和 y2 的取值范围发生变化时,影响了散点图中数据点的位置和分布,从而导致图形的变化。具体来说,y1 和 y2 是用来标识散点图中每个数据点的 x 坐标和 y 坐标的网格矩阵。
在图1中,通过 np.meshgrid(x1, x2) 创建的网格矩阵 y1 和 y2 分别以 x1 和 x2 的取值范围作为基准来生成。因此,图1中的散点图会根据 x1 和 x2 的范围进行绘制,x 和 y 的坐标数值是匹配的。
而在图2中,通过 np.meshgrid(x2, x1) 创建的网格矩阵 y1 和 y2 分别以 x2 和 x1 的取值范围作为基准来生成。因此,图2中的散点图会根据 x2 和 x1 的范围进行绘制,x 和 y 的坐标数值是颠倒的。
以下给出修改后的完整代码,供您参考:
import numpy as np
import matplotlib.pyplot as plt
# 图1
x1 = np.arange(1600, 2200, 1)
x2 = np.arange(600, 1000, 1)
z = np.random.rand(len(x1), len(x2))
y1, y2 = np.meshgrid(x1, x2)
plt.figure()
plt.subplot(111)
plt.scatter(y1, y2, c=z, cmap=plt.cm.rainbow, vmin=min(z), vmax=max(z))
plt.colorbar()
plt.title('图1')
plt.show()
# 图2
x1 = np.arange(1600, 2200, 1)
x2 = np.arange(600, 1000, 1)
z = np.random.rand(len(x1), len(x2))
y1, y2 = np.meshgrid(x2, x1)
plt.figure()
plt.subplot(111)
plt.scatter(y1, y2, c=z, cmap=plt.cm.rainbow, vmin=min(z), vmax=max(z))
plt.colorbar()
plt.title('图2')
plt.show()
希望对您有所帮助!如果还有其他问题,请随时提问。
如果回答对你有帮助,请给我一个最佳答案!{:10_254:}{:10_254:}{:10_254:}
isdkz 发表于 2023-8-6 17:14
问题出在y1和y2的赋值上。在图1中,y1和y2的赋值是通过np.meshgrid(x1, x2)得到的,而在图2中,y1和y2的赋 ...
我的意思是为什么第一个图看起来极不均匀,一条一条的,而第二个图渐变很均匀 isdkz 发表于 2023-8-6 17:14
问题出在y1和y2的赋值上。在图1中,y1和y2的赋值是通过np.meshgrid(x1, x2)得到的,而在图2中,y1和y2的赋 ...
z的值未按照对应的y1和y2进行设置,导致第一种图像错误
页:
[1]