matplotlib fill_between 'where' arg认为参数大小不同(但实际上不是)

jyztefdp  于 2023-10-24  发布在  其他
关注(0)|答案(1)|浏览(100)

给出:

line1_xclip = [0.0, 10.0, 20.0, 30.0, 40.0, 50.0, 60.0, 70.0, 80.0, 90.0, 100.0, 110.0, 120.0, 130.0]
line1_yclip = [10.0, 10.0, 5.0, 0.0, 0.0, 5.0, 10.0, 10.0, 5.0, 0.0, 0.0, 5.0, 10.0, 10.0]
line2_yclip = [0.0, 0.0, 5.0, 10.0, 10.0, 5.0, 0.0, 0.0, 5.0, 10.0, 10.0, 5.0, 0.0, 0.0]

当我跑步时:

ax.fill_between(line1_xclip, line1_yclip, line2_yclip, where=(line1_yclip<line2_yclip), color='b', interpolate=True, alpha=0.5)
ax.fill_between(line1_xclip, line1_yclip, line2_yclip, where=(line1_yclip>line2_yclip), color='r', interpolate=True, alpha=0.5)

我得到:
C:\ProgramData\Anaconda3\envs\py37\lib\site-packages\ipykernel_launcher.py:142:MatplotlibDeprecationWarning:从3.2开始,参数 where 的大小必须与fill_betweenx()中的[0.0 10.0 20.0 30.0 40.0 50.0 60.0 70.0 80.0 90.0 100.0 110.0 120.0 130.0]相同。这将在两个次要版本之后成为一个错误。
C:\ProgramData\Anaconda3\envs\py37\lib\site-packages\ipykernel_launcher.py:143:MatplotlibDeprecationWarning:从3.2开始,参数 where 的大小必须与fill_betweenx()中的[0.0 10.0 20.0 30.0 40.0 50.0 60.0 70.0 80.0 90.0 100.0 110.0 120.0 130.0]相同。这将在两个次要版本之后成为一个错误。
但如果我检查形状:

print("line1_xclip shape = %s" % np.shape(line1_xclip))
print("line1_yclip shape = %s" % np.shape(line1_yclip))
print("line2_yclip shape = %s" % np.shape(line2_yclip))

line1_xclip shape = 14
line1_yclip shape = 14
line2_yclip shape = 14
一切正常。
该过程运行,但产生:

同样的代码对其他数据产生了预期的结果,例如:

我在Windows 7-64机器上运行Python 3.7.3,Numpy 1.16.4和Matplotlib 3.3.1。
任何想法都非常赞赏。

b5lpy0ml

b5lpy0ml1#

问题是数据类型。
我试图把列表传递给一个需要数组的kwarg。
解决人:

line1_xclip = np.array([0.0, 10.0, 20.0, 30.0, 40.0, 50.0, 60.0, 70.0, 80.0, 90.0, 100.0, 110.0, 120.0, 130.0])
line1_yclip = np.array([10.0, 10.0, 5.0, 0.0, 0.0, 5.0, 10.0, 10.0, 5.0, 0.0, 0.0, 5.0, 10.0, 10.0])
line2_yclip = np.array([0.0, 0.0, 5.0, 10.0, 10.0, 5.0, 0.0, 0.0, 5.0, 10.0, 10.0, 5.0, 0.0, 0.0])

相关问题