首页 > 解决方案 > 为什么我不断得到“x 和 y 必须具有相同的第一维,但具有形状 (100,) 和 (1, 100)”?

问题描述

我一直在尝试使用我以前使用过的代码创建一个带有颜色条的图,但是这次我更改了表示 y 轴值的方程。代码如下:

import numpy as np
import matplotlib
import matplotlib as plt


θ= [0.01, 1, 2, 3, 4, 5] #values for the colourbar to use in equation in for loop
x=np.linspace[0.1, 8, 100]
y=1/(np.exp(x)+1)       #factor used in equation dependent on the x-axis values
a=(5.3)*10**4           # constant for the equation

norm = matplotlib.colors.Normalize(vmin=np.min(θ), vmax=np.max(θ))  #colourbar max and min values
c_m = matplotlib.cm.cool
s_m = matplotlib.cm.ScalarMappable(cmap='jet', norm=norm)

s_m.set_array([])

#below is the for loop that uses one value of θ at a time, represented as t in the equation


for t in θ:            
    plt.plot(x, a*y*x*[np.pi/(4*x) - (np.arctan(x*t**3)+ (t**3)/(1 + (t**6) * x**2))], color=s_m.to_rgba(t)) 

func = lambda x,pos: "{:g}".format(x *100000)
fmt = matplotlib.ticker.FuncFormatter(func)

c_bar=plt.colorbar(s_m, format=fmt)

plt.legend()
plt.xlabel('y=E/T')
plt.ylabel('$f_{ν_s}$')
c_bar.set_label(r'$ \theta \times 10^{-5}$ rads')
plt.show()

这段代码的问题在于它不断地给我以下错误信息:

“x 和 y 必须具有相同的第一维,但形状为 (100,) 和 (1, 100)”

我已经多次检查方程式,但我仍然不明白出了什么问题。最初我认为将我的 x 范围更改为不将 0 作为其最低限制可以解决问题,但事实并非如此,并且出现了相同的消息。

我已经研究过类似问题的问题(Matplotlib: ValueError: x and y must have same first dimension)但我仍然无法解决这个问题

标签: pythonfor-loopmatplotlibplotcolorbar

解决方案


你的脚本有几个问题。导致尺寸错误的原因是您在调用plt.plot. 这将创建一个列表,并将其与a*y*x项相乘,得到 的形状[1, 100]

所以,改变

a*y*x*[np.pi/(4*x) - (np.arctan(x*t**3)+ (t**3)/(1 + (t**6) * x**2))]

a*y*x*(np.pi/(4*x) - (np.arctan(x*t**3)+ (t**3)/(1 + (t**6) * x**2)))

x请注意,当您使用 linspace创建时,您也应该使用方括号x=np.linspace(0.1, 8, 100)

最后,您的模块导入有点奇怪。你需要有

import matplotlib
import matplotlib.pyplot as plt
import matplotlib.cm as cm

然后使用cm.coolcm.ScalarMappable


推荐阅读