gpt4 book ai didi

python - 在 WSL Ubuntu 中绘制图形的反复出现的问题

转载 作者:行者123 更新时间:2023-12-04 18:44:11 26 4
gpt4 key购买 nike

我正在编写一个应该绘制一个简单函数的代码,它暂时可以工作,但是当我重新启动计算机时,我一直遇到这个问题循环:

  • 我第一次尝试运行代码时,它不会发出任何错误,但也不会创建任何图表。

  • --> 为了解决这个问题,我安装了 徐明 并写了 export DISPLAY=localhost:0.0 bash 中的命令,正如 Show matplotlib plots in Ubuntu (Windows subsystem for Linux) 中的 AwokeKnowing 所建议的那样.
  • 当我运行代码时,通过上述调整,我得到以下错误:

  • _tkinter.TclError: no display name and no $DISPLAY environment variable.

    --> 为了解决这个问题,我添加了以下代码行:
    matplotlib.use('Agg')

    正如 Serenity 在 _tkinter.TclError: no display name and no $DISPLAY environment variable 中提出的那样
  • 执行此操作并运行代码后,最初会正确绘制图形。但如果我改天再试一次,它不会。代码运行正常,但没有显示图表。

  • --> 为了让它工作,我删除了这行代码:
    matplotlib.use('Agg')

    通过这样做,代码再次绘制图表。

    然后,当我重新启动计算机时,一系列问题又重新开始了。

    有谁知道我做错了什么?我对使用 Python 很陌生,所以我很可能遗漏了一些明显的东西。

    以下是我的代码的相关部分:
    #Imports
    import matplotlib
    import matplotlib.pyplot as ply
    from dolfin import *
    import numpy as np
    from mshr import *
    import math
    from math import exp

    plt.plot(tiemporeal,fcmM1)
    plt.xlabel('Tiempo')
    plt.ylabel('Resistencia')
    plt.show()

    非常感谢,对可能的格式错误深表歉意。

    PS。我在 Ubuntu 上使用 Python3。

    最佳答案

    对于旧版 WSL,添加就足够了

    export DISPLAY=127.0.0.1:0

    给您的 ~/.bashrc文件 - 默认后端应该可以正常工作。对于 WSL 2,它更复杂,您需要从 /etc/resolv.conf 获取服务器的名称然后是 ifconfig 的掩码.例如在我的系统上:

    wmiller@lcl:~$ cat /etc/resolv.conf
    # This file was automatically generated by WSL. To stop automatic generation of this file,
    # add the following entry to /etc/wsl.conf:
    # [network]
    # generateResolvConf = false
    nameserver 172.28.176.1



    wmiller@lcl:~$ ifconfig | grep 'inet '
    inet 172.28.176.7 netmask 255.255.240.0 broadcast 172.28.191.255
    inet 127.0.0.1 netmask 255.0.0.0

    所以我的 DISPLAY需要 172.28.176.7:240.0 .自动提取有点复杂,但是将以下命令添加到 ~/.bashrc为我工作:

    export DISPLAY=$((ifconfig | grep -f <(cat /etc/resolv.conf | grep nameserver |
    awk -F'[. ]' '{print $2"."$3}') | awk '{for(i=1; i <=NF; i++)
    {if($i == "inet") print $(i+1)}}' ; ifconfig |
    grep -f <(cat /etc/resolv.conf | grep nameserver |
    awk -F'[. ]' '{print $2"."$3}') |
    awk '{for(i=1; i <=NF; i++) {if($i == "netmask") print $(i+1)}}' |
    awk -F'.' '{print $3"."$4}')
    | tr "\n" " " | awk '{print $1":"$2}')

    在任何一种情况下,您可能还需要禁用 xserver 客户端中的访问控制 - 我不确定 Xming 但 vcxsrv 只需要命令行参数 -ac或在启动期间选中禁用访问控制。您还需要确保 Windows 防火墙允许连接。您可以找到 this thread有用。

    另请注意 'Agg'是一个非 gui 后端,使用它不会显示数字。我发现我的设置 'TkAgg'效果最好。

    关于python - 在 WSL Ubuntu 中绘制图形的反复出现的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60917872/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com