繁体   English   中英

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

[英]Why do I keep on getting “x and y must have same first dimension, but have shapes (100,) and (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 ),但我仍然无法解决这个问题

你的脚本有几个问题。 导致尺寸错误的一个原因是您在调用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=np.linspace(0.1, 8, 100)时,您在使用 linspace 创建x时也使用方括号。

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

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

然后使用cm.coolcm.ScalarMappable

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM