【问题标题】:plotting with subplots in a loop在循环中绘制子图
【发布时间】:2020-11-08 08:28:17
【问题描述】:
z = {'A': [0.3618426, 0.36146951], 'B': [1.8908799, 1.904695], 'C': [2.1813462e+08, 2.1833622e+08], 'D': [0.89925492, 0.89953589], 'E': [2.6356747, 2.6317911], 'F': [2.2250445e+08, 2.2501808e+08], 'G': [2.0806053e+08, 2.0691238e+08], 'H': [0.37242803, 0.37611806]}
k = [1,2]

for key in z:
plt.subplot(4,4,1)
plt.plot(k,[z[key][0],z[key][1]], 'ro-')
plt.show()

我会尽量说清楚。 z 是一个大小不同的字典。我想做的是绘制字典数量说 4 列,但行应该根据生成的图的数量增加,例如,如果有 16 个键来绘制我应该最终得到一个 4 行 4 列的数字。如何我可以这样做吗?

【问题讨论】:

  • 如果它在for 循环中工作,它应该在while 循环中工作。你有什么问题?
  • 我编辑了我的问题,抱歉我不清楚

标签: python matplotlib subplot


【解决方案1】:

绘制多张图的基本形式是下面的方法作为先决条件,你只需要决定列的数量。 cols=3 剩下的循环过程由字典的数量来完成。

import matplotlib.pyplot as plt
import pandas as pd
import math

z = {'A': [0.3618426, 0.36146951], 'B': [1.8908799, 1.904695], 'C': [2.1813462e+08, 2.1833622e+08], 'D': [0.89925492, 0.89953589], 'E': [2.6356747, 2.6317911], 'F': [2.2250445e+08, 2.2501808e+08], 'G': [2.0806053e+08, 2.0691238e+08], 'H': [0.37242803, 0.37611806]}
k = [1,2]

cols = 3
rows = math.ceil(len(z) / cols)

fig, axes = plt.subplots(rows, cols, figsize=(16,12))

dict_keys = [k for k in z.keys()]

l = 0
for i in range(rows):
    for j in range(cols):
        if len(z) == l:
            break
        else:
            key = dict_keys[i+j]
            axes[i][j].plot(k, [z[key][0],z[key][1]], 'ro-')
        l += 1

plt.show()

【讨论】:

    【解决方案2】:

    这是一个可以帮助你的代码:

    from math import ceil
    
    # 9 elements in my dict (4x4 + 1)
    z = {'A': [0.3618426, 0.36146951], 'B': [1.8908799, 1.904695], 'C': [2.1813462e+08, 2.1833622e+08], 'D': [0.89925492, 0.89953589], 'E': [2.6356747, 2.6317911], 'F': [2.2250445e+08, 2.2501808e+08], 'G': [2.0806053e+08, 2.0691238e+08], 'H': [0.37242803, 0.37611806], 'X': [0.37242803, 0.37611806]}
    k = [1,2]
    
    plt.subplots(figsize=(16,8)) # optional
    
    # fixed number of columns
    cols = 4
    # number of rows, based on cols
    rows = ceil(len(z) / cols)
    
    # iterate through indices and keys
    for index, key in enumerate(z):
        # new subplot with (i + 1)-th index laying on a grid
        plt.subplot(rows, cols, index + 1) 
        # drawing the plot
        plt.plot(k, [z[key][0], z[key][1]], 'ro-')
    
    # render everything
    plt.show()
    

    【讨论】:

    • 我已经编辑了我的问题,对不起,我不清楚,你的回答对我有帮助,但我不确定如何为我的例子做到这一点
    猜你喜欢
    • 2015-07-24
    • 2020-02-09
    • 2020-06-29
    • 2016-07-14
    • 2021-08-02
    • 2018-03-16
    • 2019-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多