我想css在我的部分情节中添加一些内容(具体来说,我想设置float:left)。
css
float:left
我如何在 div 内生成图表,以便可以用来css控制其布局?
例如,对于代码
def simple_plot(ax = None): if ax is None: fig, ax = plt.subplots() a = [1,2,3,4] b = [3,4,5,6] plt.plot(a, b,'-', color='black') simple_plot()
默认输出的 htmlIpython Notebook是
Ipython Notebook
<div class="output_area"> <div class="prompt"></div> <div class="output_subarea output_png"> <img src="data:image/png;>
对于某些图,我想用 html/css 包装它,如下所示:
<div class="output_area"> <div class="prompt"></div> <div class="output_subarea output_png"> <div class="custom-css-for-matplotlib"> ## custom html/css code wrapper
我怎样才能做到这一点?
如果我可以在单元格中简单地编写如下代码,那就太棒了:
<div class='custom css class'> simple_plot() </div>
在 Jupyter Notebook 中,您可以通过使用 IPython 的 HTML 渲染功能将 matplotlib 图像包装在自定义 HTML 和 CSS 中。这是一个实现的示例步骤:
HTML
display
以下是完整的代码示例:
import matplotlib.pyplot as plt from io import BytesIO import base64 from IPython.display import HTML, display # 定义绘图函数 def simple_plot(): fig, ax = plt.subplots(figsize=(4, 3)) # 控制图的大小 a = [1, 2, 3, 4] b = [3, 4, 5, 6] ax.plot(a, b, '-', color='black') # 将图保存到内存 buf = BytesIO() fig.savefig(buf, format="png", bbox_inches='tight') buf.seek(0) img_base64 = base64.b64encode(buf.read()).decode('utf-8') buf.close() plt.close(fig) # 生成 HTML 代码 html_code = f""" <div class="custom-css-for-matplotlib" style="float:left; margin-right:10px;"> <img src="data:image/png;base64,{img_base64}" style="width:100%; max-width:300px;"/> </div> """ display(HTML(html_code)) # 调用函数 simple_plot()
绘制图形: 使用 matplotlib 绘制图形并将其保存到 BytesIO 对象中。
matplotlib
BytesIO
生成 Base64 数据 URL: 使用 base64.b64encode 将图形编码为 Base64 格式,以便嵌入 HTML 中。
base64.b64encode
生成自定义 HTML/CSS: 包装 HTML <div> 并为其应用 CSS 样式(如 float:left 和 margin-right)。
<div>
margin-right
显示 HTML: 使用 IPython.display.HTML 和 display 将 HTML 渲染到 Jupyter Notebook 单元格中。
IPython.display.HTML
运行上述代码后,您将在 Jupyter Notebook 中看到一个带有 float:left 样式的图像。可以继续调整 HTML 和 CSS 代码以实现更复杂的布局。
如果您需要为多个图或复杂布局添加更多控制,建议将所有样式写入单独的 CSS 文件并加载它们。例如:
custom_css = """ <style> .custom-css-for-matplotlib { float: left; margin-right: 10px; border: 1px solid #ccc; padding: 5px; border-radius: 5px; } </style> """ display(HTML(custom_css))
通过这种方式,您可以轻松重复使用相同的样式。