系统范围的matplotlib后端选择取决于显示器的可用性

时间:2014-03-18 15:50:21

标签: python ssh matplotlib backend

我们说我们有一台可以在本地或远程访问的计算机(使用X服务器转发[ssh -X]而不使用ssh)。

当使用matplotlib时,我们可能希望使用不同的后端,具体取决于我们所在的会话类型。Agg当没有X服务器时,我们得到的是情节,而不是异常,{{1当有这样的情况时,我们可以用我们的情节玩一点。

但是所有这些都是静态解决方案,如果你总是想要使用相同的后端(每台计算机,每个用户甚至每个脚本),那么效果很好

如果您希望在给定脚本中选择后端,具体取决于可用性X服务器,则可以检查the display at the beginning of the script and then load whichever backend you prefer。 但是,您需要在要在两种方案中运行的每个脚本的开头插入这行代码...

有没有办法根据显示器的可用性选择后端,但作为适用于任何运行脚本的系统范围或用户范围的配置? 当有可用的显示时,我会想到类似默认后端的东西,而当没有显示时,我会想到后备后端,这适用于不修改脚本(除非脚本专门选择一些后端)。 这可能吗?

1 个答案:

答案 0 :(得分: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和图形界面(如问题)使用的homedir,这将非常有用;否则你只能创建一个静态matplotlibrc