查看matplotlib文档,似乎添加AxesSubplot到a 的标准方法Figure是使用Figure.add_subplot:
from matplotlib import pyplot
fig = pyplot.figure()
ax = fig.add_subplot(1,1,1)
ax.hist( some params .... )
Run Code Online (Sandbox Code Playgroud)
我希望能够AxesSubPlot独立于图形创建类似对象,因此我可以在不同的图中使用它们.就像是
fig = pyplot.figure()
histoA = some_axes_subplot_maker.hist( some params ..... )
histoA = some_axes_subplot_maker.hist( some other params ..... )
# make one figure with both plots
fig.add_subaxes(histo1, 211)
fig.add_subaxes(histo1, 212)
fig2 = pyplot.figure()
# make a figure with the first plot only
fig2.add_subaxes(histo1, 111)
Run Code Online (Sandbox Code Playgroud)
这是可能的matplotlib,如果可以,我该怎么做?
更新:我还没有设法解除Axes和Figures的创建,但是下面的答案中的示例可以很容易地在new或olf Figure实例中重用以前创建的轴.这可以通过一个简单的功能来说明:
def plot_axes(ax, fig=None, …Run Code Online (Sandbox Code Playgroud) 我希望我在正确的地方问这个问题。
我有一个 for 循环,因为创建了许多数字。循环完成后,我想再生成一个图形,其中三个先前创建的图作为子图。
我现在的代码是这样的:
import numpy as np
import matplotlib.pyplot as plt
def f(t):
return np.exp(-t)*np.cos(2*np.pi*t)+(t/10)**2.
t1=np.arange(0.0,5.0,0.1)
t2=np.arange(0.0,5.0,0.02)
for i in range(2):
fig= plt.figure(i)
ax1=fig.add_subplot(111)
plt.title('Jon Snow')
kraft_plot,=ax1.plot(t1,np.sin(t1),color='purple')
tyrion=ax1.axvline(2,color='darkgreen',ls='dashed')
ax1.set_ylabel('Kraft [N]',color='purple',fontweight='bold')
ax1.set_xlabel('Zeit [s]',fontweight='bold')
ax2=ax1.twinx()
strecke_plot,=ax2.plot(t2,t2/5,color='grey',label='Verlauf der Strecke')
ax2.set_ylabel('Strecke [mm]',color='grey',fontweight='bold')
ax1.legend((kraft_plot,tyrion,strecke_plot),('Jonny','Dwarf','andalltherest'),loc=2)
plt.show()
Run Code Online (Sandbox Code Playgroud)
你能帮助我吗?我可以保存整个图/图吗?
干杯,达洛。
编辑:它应该看起来像这样(右侧部分是我想要实现的): 右侧的文本应该是正常的,显然......
问题是,我首先想要单独打印这些数字,然后一起打印(最后我想保存为 pdf/png,其中包含三个数字)
我有非常复杂的3D数据,我想用matplotlib绘制.为了能够更好地理解,我想在不同的子图上绘制相同的数据view_init,每个图中只有不同的数据.目前,我的代码看起来很像:
fig = plt.figure()
views = [(0, 0), (90, 0), (0, 90)]
for i (elev, azim) in enumerate(views):
ax = fig.add_subplot(1, 3, i+1, projection='3d')
plot_heavy_data(ax) # expensive call
ax.view_init(elev, azim)
Run Code Online (Sandbox Code Playgroud)
然而,我的召唤plot_heavy_data是相当昂贵的,我想知道是否有一种方法只是"复制"一个子情节并通过改变视图方向来绘制它,但保持其他一切相同.这样我只会做一次昂贵的操作,而不是重复3次.
澄清:
该功能plot_heavy_data仅绘制到子图,如下所示:
def plot_heavy_data(ax):
ax.scatter(*data) # data is huge
Run Code Online (Sandbox Code Playgroud)
我想避免多次调用此函数.
以下是一个最小的工作样本,我只想调用该plot函数一次.
import matplotlib.pyplot as plt
import numpy as np
def plot(ax, data):
# ideally only call this function once
ax.scatter(*data)
data = np.random.random((2, 20))
fig = plt.figure(figsize=(12, 4))
for i in …Run Code Online (Sandbox Code Playgroud)