Jupyter 中 bqplot 图形的更紧凑布局
Tighter layout of bqplot figures in Jupyter
我使用 bqplot 在 Jupyter notebook 中创建了多个绘图。这些图已使用 Jupyter 小部件 HBox 和 VBox 布局属性进行排列。但是,我无法弄清楚如何在子图行之间获得紧凑的布局。获得更紧凑布局的最佳方法是什么?
下面是 Jupyter notebook 中 Python 到 运行 的代码示例。
import numpy as np
from bqplot import *
from IPython.display import Javascript, display, clear_output
import ipywidgets as widgets
size = 100
scale = 100.
np.random.seed(0)
x_data = np.arange(size)
y_data = np.cumsum(np.random.randn(size) * scale)
x_sc = LinearScale()
y_sc = LinearScale()
ax_x = Axis(label='X', scale=x_sc, grid_lines='solid')
ax_y = Axis(label='Y', scale=y_sc, orientation='vertical', grid_lines='solid')
line = Lines(x=x_data, y=x_data, scales={'x': x_sc, 'y': y_sc})
figy=[]
for i in range(2):
figx=[]
for j in range(3):
figx.append(Figure(axes=[ax_x, ax_y], marks=[line], title='Example' + str(i*3+j), fig_margin = dict(top=30, bottom=10, left=20, right=20)))
figy.append(widgets.HBox(figx))
display(widgets.VBox(figy, align_content = 'stretch'))
每个 HBox
和 VBox
都有一个 ipywidgets Layout
实例。你可以修改它的属性。
http://ipywidgets.readthedocs.io/en/latest/examples/Widget%20Styling.html
这是一个解决方案:
import numpy as np
from bqplot import *
from IPython.display import Javascript, display, clear_output
import ipywidgets as widgets
size = 100
scale = 100.
np.random.seed(0)
x_data = np.arange(size)
y_data = np.cumsum(np.random.randn(size) * scale)
x_sc = LinearScale()
y_sc = LinearScale()
ax_x = Axis(label='X', scale=x_sc, grid_lines='solid')
ax_y = Axis(label='Y', scale=y_sc, orientation='vertical', grid_lines='solid')
line = Lines(x=x_data, y=x_data, scales={'x': x_sc, 'y': y_sc})
fig_layout = widgets.Layout(width='auto', height='auto')
figy=[]
for i in range(2):
figx=[]
for j in range(3):
figx.append(Figure(layout=fig_layout, axes=[ax_x, ax_y], marks=[line], title='Example' + str(i*3+j), fig_margin = dict(top=30, bottom=10, left=20, right=20)))
figy.append(widgets.HBox(figx))
display(widgets.VBox(figy, align_content = 'stretch'))
基本上覆盖了图的 layout
属性。 bqplot 图形具有固定的自然高度。
我使用 bqplot 在 Jupyter notebook 中创建了多个绘图。这些图已使用 Jupyter 小部件 HBox 和 VBox 布局属性进行排列。但是,我无法弄清楚如何在子图行之间获得紧凑的布局。获得更紧凑布局的最佳方法是什么?
下面是 Jupyter notebook 中 Python 到 运行 的代码示例。
import numpy as np
from bqplot import *
from IPython.display import Javascript, display, clear_output
import ipywidgets as widgets
size = 100
scale = 100.
np.random.seed(0)
x_data = np.arange(size)
y_data = np.cumsum(np.random.randn(size) * scale)
x_sc = LinearScale()
y_sc = LinearScale()
ax_x = Axis(label='X', scale=x_sc, grid_lines='solid')
ax_y = Axis(label='Y', scale=y_sc, orientation='vertical', grid_lines='solid')
line = Lines(x=x_data, y=x_data, scales={'x': x_sc, 'y': y_sc})
figy=[]
for i in range(2):
figx=[]
for j in range(3):
figx.append(Figure(axes=[ax_x, ax_y], marks=[line], title='Example' + str(i*3+j), fig_margin = dict(top=30, bottom=10, left=20, right=20)))
figy.append(widgets.HBox(figx))
display(widgets.VBox(figy, align_content = 'stretch'))
每个 HBox
和 VBox
都有一个 ipywidgets Layout
实例。你可以修改它的属性。
http://ipywidgets.readthedocs.io/en/latest/examples/Widget%20Styling.html
这是一个解决方案:
import numpy as np
from bqplot import *
from IPython.display import Javascript, display, clear_output
import ipywidgets as widgets
size = 100
scale = 100.
np.random.seed(0)
x_data = np.arange(size)
y_data = np.cumsum(np.random.randn(size) * scale)
x_sc = LinearScale()
y_sc = LinearScale()
ax_x = Axis(label='X', scale=x_sc, grid_lines='solid')
ax_y = Axis(label='Y', scale=y_sc, orientation='vertical', grid_lines='solid')
line = Lines(x=x_data, y=x_data, scales={'x': x_sc, 'y': y_sc})
fig_layout = widgets.Layout(width='auto', height='auto')
figy=[]
for i in range(2):
figx=[]
for j in range(3):
figx.append(Figure(layout=fig_layout, axes=[ax_x, ax_y], marks=[line], title='Example' + str(i*3+j), fig_margin = dict(top=30, bottom=10, left=20, right=20)))
figy.append(widgets.HBox(figx))
display(widgets.VBox(figy, align_content = 'stretch'))
基本上覆盖了图的 layout
属性。 bqplot 图形具有固定的自然高度。