我正在修改一个使用matplotlib绘制一些特殊图形的python模块.
现在,这个模块只是将所有数字保存为文件.
我希望能够在ipython笔记本中工作时导入模块并查看结果"内联",另一方面我希望保留默认功能,将模块保存为文件,当模块导入所有其他模块时案例.
所以我需要以某种方式检查模块是否在ipython笔记本中导入并且pylab是否内联操作.
我怎么检查这个?
当您在笔记本上对不同的数据文件执行相同的分析时,可以方便地以图形方式选择数据文件.
在我的python脚本中,我通常会实现一个QT对话框,它返回所选文件的文件名:
from PySide import QtCore, QtGui
def gui_fname(dir=None):
"""Select a file via a dialog and return the file name.
"""
if dir is None: dir ='./'
fname = QtGui.QFileDialog.getOpenFileName(None, "Select data file...",
dir, filter="All files (*);; SM Files (*.sm)")
return fname[0]
Run Code Online (Sandbox Code Playgroud)
但是,从笔记本运行此功能
full_fname = gui_fname()
Run Code Online (Sandbox Code Playgroud)
导致内核死亡(并重启):
有趣的是,将3个命令放在3个单独的单元格中
%matplotlib qt
full_fname = gui_fname()
%matplotlib inline
Run Code Online (Sandbox Code Playgroud)
但是当我将这些命令放在一个单元中时,内核会再次死掉.
这可以防止创建类似于gui_fname_ipynb()透明地允许使用GUI选择文件的功能.
为方便起见,我创建了一个说明问题的笔记本:
有关如何在IPython Notebook中执行文件选择对话框的任何建议吗?
我正在解决的数学问题在不同的场景中提供了不同的分析解决方案,我想在一个很好的表格中总结结果.IPython Notebook可以很好地呈现列表:例如:
import sympy
from pandas import DataFrame
from sympy import *
init_printing()
a, b, c, d = symbols('a b c d')
t = [[a/b, b/a], [c/d, d/c]]
t
Run Code Online (Sandbox Code Playgroud)

但是,当我使用DataFrame将答案汇总到表中时,无法再渲染数学:
df = DataFrame(t, index=['Situation 1', 'Situation 2'], columns=['Answer1','Answer2'])
df
Run Code Online (Sandbox Code Playgroud)

"print df.to_latex()"也给出了相同的结果.我也尝试过"print(latex(t))",但是在LaTex中编译完成后就可以了,这很好,但是我还是需要手动将它转换成表格:

我应该如何正确使用DataFrame才能正确渲染数学?或者有没有其他方法将数学结果导出到Latex中的表中?谢谢!
更新:01/25/14再次感谢@Jakob解决问题.它适用于简单矩阵,但对于更复杂的数学表达式仍然存在一些小问题.但我想@asmeurer说,完美需要IPython和Pandas的更新.

更新:01/26/14如果我直接渲染结果,即只打印列表,它工作正常:

所以我第一次安装了IPython(Windows 7 64位).按照这里的说明:
下载并安装了Anaconda 1.9.1然后给出了命令
conda update conda
conda update ipython
Run Code Online (Sandbox Code Playgroud)
(以管理员身份运行命令行终端)
安装完成OK,我试图从这里打开一个示例.ipynb笔记本文件;
但我得到以下错误;
Error loading notebook
Unreadable Notebook: Notebook does not appear to be JSON: '\n\n
Run Code Online (Sandbox Code Playgroud)
我已经尝试了一些来自IPython示例笔记本的其他示例笔记本,并且都无法打开并给出相同的错误!
谁知道这里有什么问题以及如何解决?
我想使用ipython笔记本小部件为内联matplotlib图添加一定程度的交互性.
一般情况下,情节可能很重,我只想更新情节的特定元素.我知道小部件内置一个限制功能,有助于不会泛滥内核,但是当情节需要说30秒时,我不想等待这么长时间来更新一行.
通过阅读示例笔记本,我能够创建一个基本示例,其中我将一个十字光标(由2个滑块驱动)添加到mpl轴.
问题是图形显示两次.这是代码(单元格1):
fig, ax = plt.subplots()
ax.plot([3,1,2,4,0,5,3,2,0,2,4])
Run Code Online (Sandbox Code Playgroud)
...数字显示...,单元格2(编辑:感谢Thomas K的改进):
vline = ax.axvline(1)
hline = ax.axhline(0.5)
def set_cursor(x, y):
vline.set_xdata((x, x))
hline.set_ydata((y, y))
display(fig)
Run Code Online (Sandbox Code Playgroud)
最后(单元格3):
interact(set_cursor, x=(1, 9, 0.01), y=(0, 5, 0.01))
Run Code Online (Sandbox Code Playgroud)
再次显示小部件的图形.
所以问题是:
编辑
我发现了一个ipython配置旋钮,根据这款笔记本,可以禁止数字显示
%config InlineBackend.close_figures = False
Run Code Online (Sandbox Code Playgroud)
虽然示例笔记本工作,但我无法弄清楚如何单独使用此选项(没有链接示例中提供的上下文管理器类)来隐藏图形显示.
编辑2
我发现了一些文件的的InlineBackend.close_figures配置.
编辑3
由@shadanan回答引发,我想澄清一下我的目的是将光标添加到现有图形,而不是在每个光标移动时从头开始重绘图.合并单个单元格中的3个单元格:
fig, ax = plt.subplots()
ax.plot([3,1,2,4,0,5,3,2,0,2,4])
vline = ax.axvline(1)
hline = ax.axhline(0.5)
def set_cursor(x, y):
vline.set_xdata((x, x))
hline.set_ydata((y, y))
display(fig)
interact(set_cursor, x=(1, 9, 0.01), y=(0, …Run Code Online (Sandbox Code Playgroud) 在.ipynb根目录中创建文件后/,如何将该.pynb文件移动到更深的目录中,即:/subdirectory 使用Web UI?
我的笔记本有点长,我把它分成几个部分.有时,我只是想运行它的某个部分,即consecutive cells
我想跑Cell IN [52] to[54],不跑IN [51],[59].我该怎么做?
我只知道有选项run above,run below我没有看见像什么run selected cells.
更新:现在Jupyter Notebook内置了这个功能,只需按CTRL +单击即可
我一直在探索Jupyter Incubator Dashboards项目中的第一步和第二步(更多信息请访问:https://github.com/jupyter-incubator/dashboards/wiki).将我的笔记本变成可用的仪表板很简单,这很棒.
我的问题是我不确定第三步,即共享/托管仪表板.我在一个拥有本地服务器的企业环境中.我需要能够在本地服务器上共享仪表板,然后让人们通过Web访问它们.从本质上讲,我需要从第二步(dashboards_bundlers)中"部署为本地仪表板"选项.但是,似乎现在不推荐使用此功能.
我的问题是,有一种简单的方法可以在这里本地共享仪表板吗?我一直在看dashboards_server应用程序,但它现在看起来有点过头了.这里的功能看起来很强大,但可能比我们目前需要的更多.
如果这是唯一的选择,那么我将继续前进,但我想先看看是否有人有更简单的解决方案.
所以我通过anaconda安装了jupyter笔记本,我正在使用python 3内核.
我试图用做时间分析%time魔术命令,显示这里
的问题是,它只能打印挂钟时间不是CPU时间
使用%time或%%time没有帮助
%time打印壁时间为第一线仅%%time打印挂钟时间的全细胞 我不确定是否有任何特定配置来打印CPU时间
编辑
澄清使用%%time应该打印整个单元格的两个指标
我的问题是我只能获得壁时而不是CPU时间.
您可以查看此链接的预期输出%%time
python python-3.x ipython-notebook ipython-magic jupyter-notebook
真的不明白它是一个错误或者只是我的局部问题,仍然有一些问题与使用tqdm进度条与progress_apply在Jupyter.
第一次尝试:
from tqdm import tqdm
tqdm_notebook.pandas(desc="Example Desc")
keywords_df['keyword'] = keywords_df['keywird'].progress_apply(lambda x: x.replace('*',''))
Run Code Online (Sandbox Code Playgroud)
输出(没有任何条形):
AttributeError: 'function' object has no attribute 'pandas'
Run Code Online (Sandbox Code Playgroud)
第二次尝试:
from tqdm import tqdm
tqdm_notebook().pandas(desc="Example Desc")
keywords_df['keyword'] = keywords_df['keywird'].progress_apply(lambda x: x.replace('*',''))
Run Code Online (Sandbox Code Playgroud)
输出: 两个条(需要一个).第一个栏是空的(0:[00:00,?it/s]),第二个是OK.
任何想法如何更改progress_apply描述和显示栏没有空的初始化栏?:)
PS 文档(https://github.com/tqdm/tqdm)说我可以使用tqdm_notebook,但它对我不起作用:)
# Register `pandas.progress_apply` and `pandas.Series.map_apply` with `tqdm`
# (can use `tqdm_gui`, `tqdm_notebook`, optional kwargs, etc.)
tqdm.pandas(desc="my bar!")
Run Code Online (Sandbox Code Playgroud) ipython-notebook ×10
ipython ×7
python ×5
jupyter ×3
matplotlib ×2
pandas ×2
latex ×1
python-3.x ×1
sympy ×1
tqdm ×1