我们说我们有一台可以在本地或远程访问的计算机(使用X服务器转发[ssh -X
]而不使用ssh
)。
当使用matplotlib时,我们可能希望使用不同的后端,具体取决于我们所在的会话类型。Agg
当没有X服务器时,我们得到的是情节,而不是异常,{{1当有这样的情况时,我们可以用我们的情节玩一点。
您可以在系统范围和用户范围内通过TkAgg
文件设置默认的matplotlib后端。
您可以使用matplotlibrc
甚至matplotlib.use
设置which backend you want to use for that script at its first lines。
但是所有这些都是静态解决方案,如果你总是想要使用相同的后端(每台计算机,每个用户甚至每个脚本),那么效果很好
如果您希望在给定脚本中选择后端,具体取决于可用性X服务器,则可以检查the display at the beginning of the script and then load whichever backend you prefer。 但是,您需要在要在两种方案中运行的每个脚本的开头插入这行代码...
有没有办法根据显示器的可用性选择后端,但作为适用于任何运行脚本的系统范围或用户范围的配置? 当有可用的显示时,我会想到类似默认后端的东西,而当没有显示时,我会想到后备后端,这适用于不修改脚本(除非脚本专门选择一些后端)。 这可能吗?
答案 0 :(得分:1)
我希望matplotlib将这种后备功能作为某个设置,但我找不到任何东西。
所以我创建了这个脚本,如果.bashrc
未设置,我可以自动退回DISPLAY
。
您可以调整后端以使用DISPLAY
(替换TkAgg
和Agg
)并更改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
。