matplotlib 如何在Python中动态绘制多个子情节?

8nuwlpux  于 2022-11-15  发布在  Python
关注(0)|答案(1)|浏览(108)

我需要绘制一个可变数量的图(至少1个,但不知道最大数量),我不能想出一个方法来动态创建和分配子图给给定的图表。
代码如下所示:

check = False
    
    if "node_x_9" in names:
        if "node_x_11" in names:
            plt.plot(df["node_x_9"], df["node_x_11"])
            check = True
    elif "node_x_10" in names:
        if "node_x_12" in names:
            plt.plot(df["node_x_10", "node_x_12"])
            check = True
        
    if check:
        plt.show()

我想过预先设置一些子情节(eidogg. plt.subplots(3,3)),但我仍然想不出一种方法来分配情节,而不把它们绑定到给定的子情节位置。
我的想法是创建一个2x1的情节,如果我有两个子情节,1x1,如果我有一个,3x1,如果我有3个,等等,不让任何子情节空间空。

mrwjdhj3

mrwjdhj31#

我遇到过这样的案例,你想为每个案例生成一个图,但不知道有多少个案例存在,直到你查询当天的数据。
我使用正方形布局作为假设(如果您需要不同的纵横比,请更改以下内容),然后计算您有多少种情况-找到整数平方根,它加上1,将为您提供保证满足您要求的正方形的整数边长。
现在,您可以建立一个具有所需宽度和高度的matplotlib Gridspec对象,通过索引引用它来放置各个图。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import gridspec
import random

# Create some random data with size=`random` number between 5 and 100
size = random.randint(5,100)
data_rows = pd.DataFrame([np.random.normal(1,5,25) for s in range(0,size)])

# Find the length of a (near) square based on the number of the data samples    
side_length = int(len(data_rows)**(1/2))+1
print(side_length)

#Create a gridspec object based on the side_length in both x and y dimensions
gs=gridspec.GridSpec(side_length, side_length)

fig = plt.figure(figsize=(10,10))

# Using the index i, populate the gridpsec object with 
# one plot per cell.
for i,row in data_rows.iterrows():
    ax=fig.add_subplot(gs[i])
    plt.bar(x=range(0,25),height=row)

相关问题