python - 基于另一个图形创建一个图形
问题描述
我想在一个函数中生成一个图形,然后能够在另一个函数中向该图中添加额外的东西。我希望这两个数字(原始的和编辑过的)都可以供将来使用。就像是:
import numpy as np
import matplotlib.pyplot as plt
def plot_1():
X, Y = np.meshgrid(np.linspace(0, 10, 100), np.linspace(0, 10, 50))
z = np.random.rand(50, 100)
fig, ax = plt.subplots()
ax.contourf(X, Y, z, cmap="viridis")
return fig
def plot_2(fig):
ax = fig.axes[0]
ax.scatter([2, 5], [1, 4], zorder=2.5, color="r")
return ax
f = plot_1()
f2 = plot_2(f)
但是,这会更改原始图像(我想保持原来的样子)并且不会在f2
. 起初我认为问题在于散点图没有完成,但正如卢卡斯在评论中所建议的那样,这不是实际问题,因为它可以用zorder
.
我怎样才能做到这一点?
解决方案
如果我理解正确:你想要两个数字,在两者中绘制相同的图,然后只在一个中绘制一些额外的图。
这样做的方法是在函数之外创建图形并将轴传递给函数:
import numpy as np
import matplotlib.pyplot as plt
def plot_1(ax):
X, Y = np.meshgrid(np.linspace(0, 10, 100), np.linspace(0, 10, 50))
z = np.random.rand(50, 100)
ax.contourf(X, Y, z, cmap="viridis")
def plot_2(ax):
ax.scatter([2, 5], [1, 4], zorder=2.5, color="r")
fig_1, ax_1 = plt.subplots()
fig_2, ax_2 = plt.subplots()
plot_1(ax_1)
plot_1(ax_2)
plot_2(ax_2)
这将绘制两个带有轮廓的图形,但只有一个带有散点图。
推荐阅读
- asp.net - 如何更新/生成数据库表模型?
- macos - AppleScript - 获取每个打开窗口的边界
- node.js - 如何从表单发布到 URL 并使用 Express 从中获取 JSON?
- sql-server - 用于删除当前和未来日期的 SQL 查询?
- unity3d - 如何旋转对象以沿矢量 Unity3D 指向
- python - 将数据添加到 CSV 文件的新列和第一行
- angular - 错误 TS2304:部署云功能 firebase 时找不到名称“元素”
- selenium - NightwatchJS - 手动运行 Selenium 服务器时无法创建会话
- vba - VBA,带工作表,清除表格内容
- spring-boot - Spring Boot @Pattern 自定义消息不起作用