python - 在 jupyter 中使用 matplotlib 绘图:跨单元格分离代码的效果
问题描述
我正在学习 pandas 和 matplotlib,我看到了这种我无法理解的奇怪行为。
代码如下:
# plot the histograms for each feature
plt.figure(figsize=(15, 5))
for i, feature in enumerate(df.columns):
plt.subplot(1, 4, i+1)
df[feature].plot(kind='hist', title=feature)
plt.xlabel(feature)
现在结果如下:
一切都好。
现在,如果我将代码分成两个单元格,结果会发生变化:
为什么结果不一样?
解决方案
plt.figure()
创建一个新Figure
实例,plt.subplot
将为当前图形添加一个子图 - 如果当前不存在,则创建一个实例。
在第一种情况下,plt.figure()
创建一个Figure
大小为的实例,(15,5)
并且该实例现在是“当前图形”,直到它超出范围、关闭或实例化一个新Figure
实例(或“当前图形”被其他一些方法)。plt.subplot
然后将向该Figure
实例添加一个子图 - 结果是一个(15,5)
带有 4 个所需子图的大小图。
在第二种情况下,当调用plt.figure()
在不同的单元格中时,它将不再是不同单元格中的“当前图形”。这是因为该图形在第一个单元格的执行结束时关闭- 这就是您看到<Figure size 1080x360 with 0 Axes>
输出的原因。
解决这个问题的方法是存储返回的Figure
实例plt.figure()
,然后使用Figure.add_subplot
而不是plt.subplot
. 然后第一个单元格将是
fig = plt.figure(figsize=(15,5))
第二个是
for i, feature in enumerate(df.columns):
fig.add_subplot(1, 4, i+1)
df[feature].plot(kind='hist', title=feature)
plt.xlabel(feature)
推荐阅读
- amazon-web-services - AWS Transcribe Streaming BadRequestException:“无法解码音频流...”
- r - 将自定义图例添加到 R 中的 geom_line()
- r - 在 geom_sf 中填充连续颜色
- javascript - 使用 React refs 处理鼠标事件
- salesforce - 通过 aura:attribute 引用静态资源
- java - 未找到依赖项 'org.springframework.boot:spring-boot-starter-validation:2.5.1'
- firebase - 使用 List 列表创建 Document 时,Flutter App 崩溃
- javascript - Next.js Express 自定义服务器 { dev: true } 永远加载(空响应)但生产 { dev: false } 有效
- python - 重构多个 if / elif 语句,包括不等式
- reactjs - RTL - 测试 expect(onChange).toHaveBeenCalledWith({ name, value }) 不工作