matplotlib 如何子情节的字典的字母表

4urapxun  于 2023-10-24  发布在  其他
关注(0)|答案(2)|浏览(147)

我想子图16从字典中的字符串,但我尝试了for循环,但我不知道如何完成我的代码与我的DictDataFrame:

DataFrameDict.keys() :
dict_keys([1, 10, 20, 30, 40, 47, 100, 15, 25, 35, 45, 50, 5, 105, 55, 0])
DataFrameDict[0]:

date_time   id  value   Duration_datetime   Duration(Min)

所以我想子图每个列持续时间(分钟)为每个从字典中的框架,但我不知道如何处理:DataFrameDict[键]'持续时间(分钟']

fig = plt.figure()
fig, ax = plt.subplots(nrows=4, ncols=4)

for i in range(4):
    for j in range(4):
        subplot = ax[i, j]

plt.show()
qco9c6ql

qco9c6ql1#

尝试将axes数组变平并使用zip循环:

fig = plt.figure()
fig, axes = plt.subplots(nrows=4, ncols=4)

for (key, data), ax in zip(DataFrameDict.items(), axes.ravel()):
    data['Duration (Min)'].plot(ax=ax)

    ax.set_title(f'Data for {key}')

plt.show()
qlvxas9a

qlvxas9a2#

  • 使用.ravel来展平axes array非常常见。
  • 参见answerquestion的详细说明。
  • math.ceil将确保有足够的行,当要绘制的项目数不能被列数整除时。
  • 这个for-loop遍历枚举的dict keys,使用idxax_array索引正确的值,并使用key绘制每个字符串。
  • pandas.DataFrame.plot是用来绘制点阵的。
import pandas as pd
import numpy as np  # for test data
import math

# test data
rows = 10
keys = sorted([1, 10, 20, 30, 40, 47, 100, 15, 25, 35, 45, 50, 5, 105, 55, 0])
df_dict = {key: pd.DataFrame({'a': np.random.randint(0, 10, size=(rows)), 'b': np.random.randint(15, 25, size=(rows)), 'Duration(Min)': np.random.randint(30, 40, size=(rows))}) for key in keys}

# determine number of rows, given the number of columns
cols = 4
rows = math.ceil(len(keys) / cols)

# create the figure with multiple axes
fig, axes = plt.subplots(nrows=rows, ncols=cols, figsize=(16, 16))

# convert the axes from a 4x4 array to a 16x1 array
ax_array = axes.ravel()

# iterate through the dataframe dictionary keys and use enumerate
for idx, key in enumerate(keys):
    df_dict[key]['Duration(Min)'].plot(ax=ax_array[idx], ylabel='Value', title=f'DataFrame: {key}')
plt.tight_layout()
plt.show()

相关问题