首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用python产生尽可能多的任意大小的子图,以适应所有数据?

如何使用python产生尽可能多的任意大小的子图,以适应所有数据?
EN

Stack Overflow用户
提问于 2016-04-07 16:40:27
回答 2查看 705关注 0票数 1

如果我有一个用Matplotlib绘制图的python类的方法,那么如何在另一个方法中使用这个方法来生成任意大小的子图。

例如

职能:

代码语言:javascript
复制
import matplotlib.pyplot as plt
def plot(x,y):
    fig=plt.figure()
    plt.plot(x,y)

x=[3,3,5,4,6,7,8,6]
y=[6,,5,,7,6,5,4,6]
plot(x,y)

会产生一个图表。如果我有30组(x,y)对,我如何在循环中使用plot,同时添加子图,以产生所需的子图。也就是说,如果我们想要一个4×4的子图,那么我们需要7个子图,剩下的只包含2个图。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-12 10:20:14

armatita的答案是非常好的,它总是尝试安排一个“正方形”的子图(在可能的情况下相同的行数和列数)。

如果您希望子图遵循不同的纵横比(即,当您有16:9监视器时,列数多于行数),则可以使用以下方法:

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

def fitPlots(N, aspect=(16,9)):
    width = aspect[0]
    height = aspect[1]
    area = width*height*1.0
    factor = (N/area)**(1/2.0)
    cols = math.floor(width*factor)
    rows = math.floor(height*factor)
    rowFirst = width < height
    while rows*cols < N:
        if rowFirst:
            rows += 1
        else:
            cols += 1
        rowFirst = not(rowFirst)
    return rows, cols

numberofplots = 31
rows,cols = fitPlots(numberofplots)

plt.figure()
for i in range(1,numberofplots+1):
    x = np.random.randint(0,100,10)
    y = np.random.randint(0,100,10)
    ax = plt.subplot(rows,cols,i)
    ax.plot(x,y)
plt.show()
票数 1
EN

Stack Overflow用户

发布于 2016-04-07 17:44:03

您可以使用子图来实现这一点。以下示例:

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

def plot(x,y,i,num):
    snum = np.sqrt(num)+1
    ax = plt.subplot(snum,snum,i)
    ax.plot(x,y)

numberofplots = 31
for i in range(1,numberofplots+1):
    x = np.random.randint(0,100,10)
    y = np.random.randint(0,100,10)
    plot(x,y,i,numberofplots)

,结果如下:

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

https://stackoverflow.com/questions/36482328

复制
相关文章

相似问题

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