基于显示器可用性的系统级matplotlib后端选择

4
假设我们有一台计算机,可以本地或远程访问(都使用X服务器转发[ssh -X]和未使用ssh)。
在使用matplotlib时,我们可能希望根据会话的类型使用不同的后端。当没有X服务器时,使用Agg以便得到绘图而不是异常;当有X服务器时,使用TkAgg以便更灵活地玩弄绘图。
您可以通过系统范围和用户范围的matplotlibrc文件设置默认的matplotlib后端。您还可以使用matplotlib.use甚至matplotlib.rcParams来设置脚本的哪个后端要在其第一行中使用
但所有这些都是静态解决方案,如果您始终想要使用相同的后端(每台计算机、每个用户甚至每个脚本),那么这些解决方案就很好用。
如果您希望在给定的脚本中根据X服务器的可用性选择后端,您可以在脚本开头检查显示器,然后加载您喜欢的后端。但是,您需要在想要在两种情况下运行的每个脚本的开始处插入此代码行... 是否有任何方法可以根据显示器的可用性选择后端作为系统范围或用户范围的配置,适用于运行的任何脚本? 我考虑的是像默认后端这样的东西,在有显示器可用时使用,当没有显示器可用时使用备用后端,而不修改脚本(除非脚本明确选择某些后端)。这可能吗?

1
我认为这是不可能的。但是,在所有脚本的顶部运行一个选择正确后端的脚本会有什么影响呢?另请参见讨论。 - gg349
1
你可以配置多个rcparams文件的副本,以任何你想要的方式。当你登录时运行一个脚本,在启动Python之前将正确的文件放置在相应位置。 - tacaswell
在脚本开始时设置的问题在于,您需要每个脚本都适应该环境。当然,这并不是非常困难的任务,但由于计算机始终相同且脚本不断变化,一种独立于脚本的设置方式是有意义的。 - mgab
1个回答

1
我希望matplotlib能够有一个回退功能的设置,但我找不到任何相关内容。因此,我编写了这个脚本,您可以将其放在.bashrc中,以便在未设置DISPLAY时自动回退。您可以适应使用和不使用DISPLAY的后端(替换TkAggAgg),并更改matplotlibrc的位置(两个位置)。
# create the settings file if it doesn't exist
cp -n /etc/matplotlibrc ~/.config/matplotlib/matplotlibrc
# set the backend to use depending on $DISPLAY
if [ -z "$DISPLAY" ]; then backend=Agg; else backend=TkAgg; fi
# find the line(s) starting with 'backend' and replaced them
sed -i "s/^backend.*/backend      : $backend/" ~/.config/matplotlib/matplotlibrc

如果你在ssh和图形界面中都使用同一个主目录,那么这将特别有用(就像这个问题一样);否则,你可以创建一个静态的matplotlibrc


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接