首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在matplotlib中排列具有网格上函数调用子图的绘图

在matplotlib中排列具有网格上函数调用子图的绘图
EN

Stack Overflow用户
提问于 2017-03-14 10:26:58
回答 1查看 1.4K关注 0票数 1

我正在寻找类似于R中的arrangeGrob的东西:

我有一个函数(例如,函数FUN1),它用子图创建一个图。FUN1创建的子图的数量可能会有所不同,而且绘图本身也是相当复杂的。我还有另外两个函数FUN2FUN3,它们也创建了不同结构的图。

是否有一种简单的方法来定义/安排一个整体网格,例如一个简单的3行1列样式和简单传递

代码语言:javascript
复制
FUN1 --> GRID(row 1, col 1)
FUN2 --> GRID(row 2, col 1)
FUN3 --> GRID(row 3, col 1)

之后,FUN1生成的复杂地块将在第1行中绘制,由FUN2生成的图在第2行中绘制等等,而不需要在前面的函数中指定子图条件?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-14 16:43:16

用matplotlib创建绘图的通常方法是先创建一些轴,然后再绘制到这些轴。可以使用plt.subplotsfigure.add_subplotplt.subplot2grid或使用GridSpec在网格上设置轴。

一旦创建了这些轴,就可以将它们赋予函数,后者将内容绘制到轴上。下面是一个示例,其中创建了6个轴,并使用3个不同的函数绘制它们。

代码语言:javascript
复制
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
import numpy as np

def func1(ax, bx, cx):
    x = np.arange(3)
    x2 = np.linspace(-3,3)
    y1 = [1,2,4]
    y2 = [3,2.5,3.4]
    f = lambda x: np.exp(-x**2)
    ax.bar(x-0.5, y1, width=0.4)
    ax.bar(x, y2, width=0.4)
    bx.plot(x,y1, label="lab1")
    bx.scatter(x,y2, label="lab2")
    bx.legend()
    cx.fill_between(x2, f(x2))

def func2(ax, bx):
    x = np.arange(1,18)/1.9
    y = np.arange(1,6)/1.4
    z = np.outer(np.sin(x), -np.sqrt(y)).T
    ax.imshow(z, aspect="auto", cmap="Purples_r")
    X, Y = np.meshgrid(np.linspace(-3,3),np.linspace(-3,3))
    U = -1-X**2+Y
    V = 1+X-Y**2
    bx.streamplot(X, Y, U, V, color=U, linewidth=2, cmap="autumn")

def func3(ax):
    data = [sorted(np.random.normal(0, s, 100)) for s in range(2,5)]
    ax.violinplot(data)


gs = gridspec.GridSpec(3, 4, 
                width_ratios=[1,1.5,0.75,1],  height_ratios=[3,2,2] )

ax1 = plt.subplot(gs[0:2,0])
ax2 = plt.subplot(gs[2,0:2])
ax3 = plt.subplot(gs[0,1:3])
ax4 = plt.subplot(gs[1,1])
ax5 = plt.subplot(gs[0,3])
ax6 = plt.subplot(gs[1:,2:])

func1(ax1, ax3, ax5)
func3(ax2)
func2(ax4, ax6)

plt.tight_layout()
plt.show()

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42783425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档