相关疑难解决方法(0)

matplotlib:我可以创建AxesSubplot对象,然后将它们添加到Figure实例中吗?

查看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)

python matplotlib

62
推荐指数
2
解决办法
4万
查看次数

在一个图形中绘制某些内容,然后在另一图形中再次使用它

我希望我在正确的地方问这个问题。

我有一个 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,其中包含三个数字)

python numpy matplotlib subplot

5
推荐指数
1
解决办法
4912
查看次数

在matplotlib中重复相同的子图

我有非常复杂的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)

python plot matplotlib

5
推荐指数
0
解决办法
255
查看次数

标签 统计

matplotlib ×3

python ×3

numpy ×1

plot ×1

subplot ×1