有没有人设法在 Windows 上使用 Strawberry Perl 5.30.1.1 的 PDL 版本使用 PDL 创建绘图?

Has anyone managed to create plots with PDL using the PDL edition of Strawberry Perl 5.30.1.1 on Windows?

提问人:Louis Strous 提问时间:1/6/2020 最后编辑:Louis Strous 更新时间:3/11/2022 访问量:249

问:

有没有人设法在 Windows 上使用 PDL 版本的 Strawberry Perl 使用 PDL(Perl 数据语言)创建绘图?

我在 Windows 10(64 位)上从 http://strawberryperl.com/releases.html 安装了 Strawberry Perl 5.30.1.1 的 PDL 版本,启动了 PDL (pdl2),并尝试显示 PDL 书籍(2015 版)中第一个示例中描述的绘图:

pdl> use PDL::Graphics::Simple
pdl> imag (sin(rvals(200,200)+1))

但得到了

Trying gnuplot (PDL::Graphics::Gnuplot)...nope
Trying pgplot (PDL::Graphics::PGPLOT::Window)...nope
Trying plplot (PDL::Graphics::PLplot)...nope
Trying prima (PDL::Graphics::Prima)...nope
Runtime error: Sorry, all known plotting engines failed.  Install one and try again.

尽管 gnuplot 5.2 补丁级别 6 包含在该版本的 Strawberry Perl 中。

我发现 PDL 没有检测到 gnuplot,因为 Alien::Gnuplot v1.033 中存在问题。如果我将 Alien::Gnuplot::load_gnuplot 的特定于 Windows 的部分更改为

if($^O =~ /MSWin32/i) {

  if( $exec_path =~ m/([\"\*\?\<\>\|])/ ) {
    die "Alien::Gnuplot: Invalid character '$1' in path to gnuplot -- I give up" ;
  }

  use Win32::Job;
  my $job = Win32::Job->new;
  open my $ofh, ">$file";
  if (defined $ofh) {
    my $pid = $job->spawn(undef, qq{"$exec_path" ${file}_gzinta},
                          { no_window => 1, stdout => $ofh, stderr => $ofh });
    if (defined $pid) {
      $job->run(3); # wait at most 3 seconds for job to finish
    }
  }
}

然后运行 PDL 示例将生成:

Trying gnuplot (PDL::Graphics::Gnuplot)...PDL::Graphics::SImple: Gnuplot exists but yours doesn't support either the x11 or wxt terminal
Trying pgplot (PDL::Graphics::PGPLOT::Window)...nope
Trying plplot (PDL::Graphics::PLplot)...nope
Trying prima (PDL::Graphics::Prima)...nope
Runtime error: Sorry, all known plotting engines failed.  Install one and try again.

因此,检测到 Gnuplot,但显然无法满足一些额外的要求。

因此,Windows 上 Strawberry Perl 5.30.1.1 的 PDL 版附带的 gnuplot 版本似乎不适合 PDL 使用,即使 Alien::Gnuplot 问题已修复——但随机用户(我)应该是第一个注意到这一点的人,这似乎很奇怪。还是我做错了什么?

我在 https://rt.cpan.org/Ticket/Display.html?id=131361 报告了这个明显的错误,但我对其他用户在 Windows 上使用此版本的体验感兴趣。

编辑 2020-01-10https://pdl.perl.org 说 Strawberry Perl 的 PDL 版本是在 Windows 上安装 PDL 的“绝对最简单的方法”,并且没有提到当时需要安装的任何其他内容。

它还提到了一种“替代的简单方法”,涉及显式安装 PGPLOT,这是 PDL 尝试使用的其他图形引擎之一。

言下之意是,“绝对最简单的方法”不需要额外的工作来安装图形引擎,但我的经验是不同的。

我的问题不是“我还需要安装哪些其他东西才能使我的 PDL 使用图形引擎?我想知道它是否可以开箱即用,正如“绝对最简单的方法”所暗示的那样。

Windows Perl PDL

评论

0赞 Polar Bear 1/6/2020
该消息指出,但您的消息不支持 x11 或 wxt 终端 -- gnuplot 需要 x11 环境或 wxt 终端。您的选择是 XmingX Cygwin
2赞 Louis Strous 1/10/2020
@PolarBear:Windows 上的 gnuplot 不需要 x11 或 wxt 终端。它的“Windows”终端工作得很好。但显然 PDL 只知道如何使用 x11 或 wxt 终端。那么,如果 PDL 不能在 Windows 上使用 gnuplot,为什么要将 gnuplot 和 PDL 打包在一起(在 Windows 的 Strawberry Perl PDL Edition 中)呢?

答:

1赞 Ed. 3/11/2022 #1

不幸的是,在撰写本文时,对 Windows 的 PDL 图形支持有些薄弱。该命令有效(演示),但正如您所注意到的,支持的各种图形驱动程序在各个方面都不起作用。demo 3dPDL::Graphics::TriDPDL::Graphics::Simple

好消息是,正在采取措施来纠正这个问题 - 例如,旨在允许在 Windows 上安装 PLplot。如果您想提供帮助(编码、测试,甚至只是报告特定问题),请查看各个模块的 GitHub 页面,了解当前跟踪的问题:Alien::PLplot