代码之家  ›  专栏  ›  技术社区  ›  Matthew Rankin val

为什么“保存”按钮在Matplotlib绘图上不起作用?

  •  10
  • Matthew Rankin val  · 技术社区  · 14 年前

    我在Mac OS X 10.6上的python 2.7 virtualenv中安装了 matplotlib 1.0.0 我可以很好地创建绘图。但是,每当我按下“保存”按钮时,我不能在“保存对话框”窗口中键入文本,也不能保存绘图。我唯一能做的就是点击取消。有没有想过是什么引起的以及如何解决?

    Matplotlib安装程序

    我通过克隆安装了matplotlib astraw的matplotlib github repository 然后松散地遵循 hyperjeff的numpy/scipy/matplotlib安装说明。以下是 setup.cfg make.osx 的潜在相关部分,包括在编译和安装之前修改的部分。

    设置.cfg

    [鸡蛋信息]
    tag_svn_revision=1
    
    [目录]
    basedirlist=/users/matthew/.virtualenvs/matplotlib测试
    
    [地位]
    #抑制=真
    真是真的
    
    [提供套餐]
    
    [支持语]
    γgtk=假
    GGKAGG=假
    TKAGG=假
    WXAGG=假
    MyOSX =假
    
    [RCX选项]
    后端=MacOSX
    #numerix=数字
    < /代码> 
    
    

    制造.osx

    build mpl into a local install dir with
    prefix=/users/matthew/.virtualenvs/matplotlib测试
    MPlversion=1.0RC1
    芘=2.7
    python=python$pyversion_
    zlibversion=1.2.3
    PNG版本=1.2.39
    自由类型版本=2.3.11
    Macosx部署目标=10.6
    osx_sdk_ver=10.6
    arch_flags=“-arch i386 arch x86_64”
    
    ##您不需要配置超过这一点(但我做了…)
    
    pkg_config_path=“$前缀/lib/pkg config”
    cflags=“$架构标记-i$前缀/include-i$前缀/include/freetyp2-isysroot/developer/sdks/macosx$osx_sdk_ver.sdk”
    ldflags=“$arch_flags-l$prefix/lib-syslibroot,/developer/sdks/macosx$osx_sdk_ver.sdk”
    
    pkg_config_path=“$前缀/lib/pkg config”
    cflags=“-arch i386-arch x86_64-i$前缀/include-i$/前缀/include/freetyp2-isysroot/developer/sdks/macosx$osx_sdk_ver.sdk”
    ldflags=“-arch i386-arch x86_64-l$前缀/lib-syslibroot,/developer/sdks/macosx$osx_sdk_ver.sdk”
    fflags=“-arch i386-arch x86_64”
    < /代码> 
    
    

    在修改了setup.cfgmake.osx之后,我发出了以下命令来安装matplotlib:。

    make-f make.osx fetch deps mpl_build mpl_install
    python setup.py安装
    < /代码> 
    
    

    注意:sudois not required,since I'm installing into a virtualenv instead of into the site packages like hyperjeff is doing.

    python安装

    我使用python.org的python 2.7 ppc/i386/x86-64 mac os x installer disk image for mac os x 10.5安装了python 2.7。多亏了ned deily's answer to this so question,i know that this version of python 2.7 cannot run idle or tkinter on mac os x 10.6.

    问题

    1. 我安装的python 2.7版本可能是问题的原因吗?我应该使用Mac OS X 10.3到10.6的32位Mac OS X安装程序磁盘映像重新安装python 2.7吗?
    2. 我是否需要在setup.cfg中配置不同的gui_支持选项,然后重新编译matplotlib?

    更新,2010年9月13日,下午3:33

    似乎其他MacOSX和Matplotlib用户也有同样的问题。在matplotlib用户邮件列表中,两个用户报告在Mac OS X 10.5上有相同的问题。尽管如此,他们运行的Matplotlib为0.99.1.1和0.99.1.2,而Matplotlib为1.0.0,我已经安装了。

    更新日期:2010年9月14日上午8:18

    matplotlib bug 2973874was opened on 20-mar-10 with the same issue.但是,它是一个优先级5,自从这个bug最初被打开后就没有被修改过。下面是错误的描述:

    < Buff行情>

    我运行的是6.0.1热情的python distribution 64位Mac。如果运行一个绘图并单击“保存”,则会打开一个保存对话框窗口,我无法在“文件名”字段中输入文本。我可以选择现有文件,但仍然无法修改名称。如果我选择一个非PNG文件,它不会覆盖它。我得到一个同名但扩展名为png的文件。

    < /块引用安装在Mac OS X 10.6上的python 2.7 virtualenv中。我可以很好地创建绘图。但是,每当我按下保存按钮,我不能在保存对话框窗口中键入文本,也不能保存绘图。我唯一能做的就是点击取消。有没有想过是什么引起的以及如何解决?

    alt text

    Matplotlib安装程序

    我通过克隆安装了Matplotlibastraw's matplotlib github repository然后松散地跟随HyperJeff's Installation Instructions for numpy/scipy/matplotlib. 以下是setup.cfgmake.osx包括在编译和安装之前修改的部分。

    安装程序

    [egg_info]
    tag_svn_revision = 1
    
    [directories]
    basedirlist = /Users/matthew/.virtualenvs/matplotlib-test
    
    [status]
    #suppress = True
    #verbose = True
    
    [provide_packages]
    
    [gui_support]
    #gtk = False
    #gtkagg = False
    #tkagg = False
    wxagg = False
    #macosx = False
    
    [rc_options]
    backend = MacOSX
    #numerix = numpy
    

    奥克斯

    # build mpl into a local install dir with
    PREFIX=/Users/matthew/.virtualenvs/matplotlib-test
    MPLVERSION=1.0rc1
    PYVERSION=2.7
    PYTHON=python${PYVERSION}
    ZLIBVERSION=1.2.3
    PNGVERSION=1.2.39
    FREETYPEVERSION=2.3.11
    MACOSX_DEPLOYMENT_TARGET=10.6
    OSX_SDK_VER=10.6
    ARCH_FLAGS="-arch i386-arch x86_64"
    
    ## You shouldn't need to configure past this point (but I did...)
    
    PKG_CONFIG_PATH="${PREFIX}/lib/pkgconfig"
    CFLAGS="${ARCH_FLAGS} -I${PREFIX}/include -I${PREFIX}/include/freetype2 -isysroot /Developer/SDKs/MacOSX${OSX_SDK_VER}.sdk"
    LDFLAGS="${ARCH_FLAGS} -L${PREFIX}/lib -syslibroot,/Developer/SDKs/MacOSX${OSX_SDK_VER}.sdk"
    
    PKG_CONFIG_PATH="${PREFIX}/lib/pkgconfig"
    CFLAGS="-arch i386 -arch x86_64 -I${PREFIX}/include -I${PREFIX}/include/freetype2 -isysroot /Developer/SDKs/MacOSX${OSX_SDK_VER}.sdk"
    LDFLAGS="-arch i386 -arch x86_64 -L${PREFIX}/lib -syslibroot,/Developer/SDKs/MacOSX${OSX_SDK_VER}.sdk"
    FFLAGS="-arch i386 -arch x86_64"
    

    修改后安装程序奥克斯,我发出以下命令安装matplotlib:

    make -f make.osx fetch deps mpl_build mpl_install
    python setup.py install
    

    注:sudo不需要,因为我正在安装到virtualenv中,而不是像hyperjeff那样安装到站点包中。

    python安装

    我使用python.org安装了python 2.7用于Mac OS X 10.5的python 2.7 ppc/i386/x86-64 Mac OS X安装程序磁盘映像. 多亏了Ned Deily's answer to this SO question我知道这个版本的python 2.7不能在mac os x 10.6上运行idle或tkinter。

    问题

    1. 我安装的python 2.7版本可能是问题的原因吗?我应该使用用于Mac OS X 10.3到10.6的python 2.7 32位Mac OS X安装程序磁盘映像?
    2. 有不同的吗gui_support我需要在其中配置的选项安装程序然后重新编译matplotlib?

    更新,2010年9月13日,下午3:33

    似乎其他MacOSX和Matplotlib用户也有同样的问题。在Matplotlib用户邮件列表中,two users reported having the same problem on Mac OS X 10.5. 尽管如此,他们运行的Matplotlib0.99.1.1和0.99.1.2与我安装的Matplotlib1.0.0相比。

    更新日期:2010年9月14日上午8:18

    matplotlib bug 2973874于2010年3月20日以同一版本开放。但是,它是一个优先级5,自从这个bug最初被打开后就没有被修改过。下面是错误的描述:

    我运行的是6.0.1热情的python distribution 64位Mac。如果运行一个绘图并单击“保存”,则会打开一个保存对话框窗口,我无法在“文件名”字段中输入文本。我可以选择现有文件,但仍然无法修改名称。如果我选择一个非PNG文件,它不会覆盖它。我得到一个同名但扩展名为png的文件。

    4 回复  |  直到 7 年前
        1
  •  7
  •   user227667    14 年前

    您需要说服OSX,virtualenv实际上是从应用程序包中运行的。此处讨论的修复:

    http://groups.google.com/group/python-virtualenv/browse_thread/thread/83fa4a12d22a30c8/744e19c194f1618a

    并在这里实施:

    https://github.com/gldnspud/virtualenv-pythonw-osx

        2
  •  1
  •   bougui    12 年前

    我的回答不能解决问题,但可以轻松解决!您可以在终端中触摸具有正确文件扩展名的新文件。在Matplotlib窗口中用鼠标选择这个文件并覆盖它之后。

        3
  •  1
  •   seralouk    7 年前

    解决这个问题:

    使用 conda install python.app 安装 pythonw .

    然后使用 巨蛇座 而不是 python 在你的终点站。

    例如。

    pythonw my_plot.py
    

    希望这有帮助

        4
  •  0
  •   Bersavosh    11 年前

    对于那些thouis方法不起作用的人:

    我注意到一个简单的解决方法是更改matplotlib后端。以下是可用后端的列表:

    http://matplotlib.org/faq/usage_faq.html#what-is-a-backend

    请注意,您应该选择一个渲染器(即支持 show() 命令)。您可能需要安装后端,但可能安装了多个后端。

    这样做:

    import matplotlib
    matplotlib.use('Qt4Agg')    #replace 'Qt4Agg' with desired backend
    

    警告:这应该在导入pylab等之前完成。