使用https://github.com/lava/matplotlib-cpp进行测试。我有Python 3。10.10,麻木1。24.2和matplotlib 3。7.1
matplotlib-cpp的作者不发布版本。我在2023-04-21使用了当前版本(提交ef 038)。
当我构建“surface”示例(根据作者的说明)并运行结果可执行文件时,我得到了以下内容:
terminate在抛出'std::runtime_error'的示例后调用what():No axis [1] 17416 IOT指令(内核转储)
github issues讨论中的报告似乎表明,有些人已经成功地运行了matplotlib-cpp示例。
对我来说,2D的例子似乎是可行的。然而,如上所述,3d示例全部失败。
我尝试了github issues讨论中建议的一些更改,但没有任何帮助。
编辑:这是来自GCC的回溯
(gdb) bt
#0 __pthread_kill_implementation (threadid=, signo=signo@entry=6, no_tid=no_tid@entry=0)
at pthread_kill.c:44
#1 0x00007ffff74a0953 in __pthread_kill_internal (signo=6, threadid=) at pthread_kill.c:78
#2 0x00007ffff7451ea8 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26
#3 0x00007ffff743b53d in __GI_abort () at abort.c:79
#4 0x00007ffff769a833 in __gnu_cxx::__verbose_terminate_handler ()
at /usr/src/debug/gcc/gcc/libstdc++-v3/libsupc++/vterminate.cc:95
#5 0x00007ffff76a6d0c in __cxxabiv1::__terminate (handler=)
at /usr/src/debug/gcc/gcc/libstdc++-v3/libsupc++/eh_terminate.cc:48
#6 0x00007ffff76a6d79 in std::terminate () at /usr/src/debug/gcc/gcc/libstdc++-v3/libsupc++/eh_terminate.cc:58
#7 0x00007ffff76a6fdd in __cxxabiv1::__cxa_throw (obj=,
tinfo=0x555555562d60 <typeinfo for std::runtime_error@GLIBCXX_3.4>,
dest=0x7ffff76be480 std::runtime_error::~runtime_error())
at /usr/src/debug/gcc/gcc/libstdc++-v3/libsupc++/eh_throw.cc:98
#8 0x000055555555a369 in matplotlibcpp::plot_surface (x=std::vector of length 41, capacity 64 = {...},
y=std::vector of length 41, capacity 64 = {...}, z=std::vector of length 41, capacity 64 = {...},
keywords=std::map with 0 elements, fig_number=0) at ../matplotlibcpp.h:567
#9 0x00005555555569e7 in main () at surface.cpp:22
1条答案
按热度按时间o2g1uqev1#
发生的是matplotlib API自matplotlib-cpp上次更新以来发生了变化。
在最近的matplotlib版本中,没有将
projection=3d
传递给gca()
函数。相反,应该显式地创建一个子图add_subplot(projection=3d)
。附加的补丁修复了表面, Flutter ,和lines 3d的例子给我。
我已经分解出一段代码,将其剪切/粘贴在4个地方,并将其作为一个新函数。在该函数中,我实现了我所描述的修复。但是,我选择保留对
gca()
的调用,尽管我认为它是多余的。