我可以在Jupyter Notebook中更新图形的坐标轴吗?
我在尝试在同一个坐标轴上绘制不同类型的图表时,发现如果我在Jupyter Notebook的不同单元格中绘图,结果并不是我想要的。而如果我在同一个单元格中绘图,结果又会不同。我可以在Jupyter Notebook中更新坐标轴,添加额外的图表吗?为什么我不能在同一个坐标轴上看到两个图表呢?
我原本期待看到这样的结果
1 个回答
0
你可以使用一些工具来找到子图的特定坐标轴对象,然后在里面修改内容。接着,你需要重新调用图形,以便显示修改后的内容。
我做了一个例子,里面有代码,你可以在这里查看Jupyter笔记本。实际的代码在这里。(还有一个扩展版本,实际使用了子图来显示两个并排的图,可以在这里查看。实际的代码在这里。)
我来简单总结一下:
单元格1 - 生成散点图的单元格
#based on https://stackoverflow.com/a/75562058/8508004 & https://stackoverflow.com/a/26447505/8508004
import numpy as np
x_data, y_data = np.repeat(np.linspace(0, 9, 100)[None,:], 2, axis=0) + np.random.rand(2, 100)*2
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.scatter(x_data, y_data);
运行这个单元格会显示散点图。
单元格2 - 设置回归线的数据
z = np.polyfit(x_data, y_data, 1)
p = np.poly1d(z)
这个单元格不会输出任何内容。
单元格3 - 在散点图上添加回归线并显示现在带有回归线的图
ax.plot(x_data,p(x_data), '-', color= "orange")
fig
接下来运行这个单元格,会显示现在已经添加了回归线的散点图。
关于这一点,有几点需要注意:
注意,我在单元格#2中提供的代码其实不一定非得是单元格#2。只要在下一个单元格的代码之前执行过这些内容就可以了。单元格#3保持简短,因为提问者有一个单元格里面只有一行
ax.plot()
,所以我想让最后的部分更接近这种情况。fig
不一定要和添加趋势线的命令放在同一个单元格里。可以在后面运行它来显示修改后的图形。此外,在单元格的最后一行可以用display(fig)
,而不是单纯的fig
,这样最后一行可以写其他内容。例如单元格#3可以改成像提问者那样的一行:
ax.plot(x_data,p(x_data), '-', color= "orange");
接下来是单元格#4,用来显示修改后的图:
display(fig) print("test")
或者把这些内容合并成一个替代的单元格#3,来演示在修改后重新调用图形,同时显示它不需要在最后一行调用:
ax.plot(x_data,p(x_data), '-', color= "orange") display(fig) print("test")