![](/img/trans.png)
[英]VS Code execute selection to IPython shell in terminal (no notebook)
[英]Python Saving PNG in Terminal vs IPython Notebook
我正在编写一个基本的 Python 模块,其中包含一个从 Pandas DataFrame 绘制一些数据的函数。 问题是,我希望用户从交互式shell和IPython的笔记本电脑都调用这个函数。 不幸的是,我们的交互式 shell 环境没有任何有效的 DISPLAY 选项供 matplotlib 使用,所以我希望我的函数(或完整模块)的行为根据它加载到的环境而略有不同。 (例如,默认情况下不保存在 IPython 中显示绘图,并保存绘图而不显示在 shell 中)。
这个问题给了我一个部分的答案,因为我可以明确告诉用户在他们导入我的模块之前编写matplotlib.use('Agg')
,但肯定有更自动化的后端方法来处理这个问题?
您可以尝试检查您是否遇到这种情况(空$DISPLAY
)并将默认用户默认到Agg
后端,而不是要求他们这样做。
def configure_matplotlib():
import os
if 'DISPLAY' not in os.environ:
if matplotlib.get_backend() != 'Agg':
matplotlib.use('Agg')
import matplotlib
configure_matplotlib()
import matplotlib.pyplot as plt
...
现在,一旦pyplot
被导入, matplotlib.use
就没有任何效果,但是如果您的用户已经这样做了,他们可能无论如何都有一个可以工作的配置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.