Issue
I would like to subplot 16 dataframes from a dictionary, but I tried with for loop but I don't how to finish my code with my 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)
So I would like to subplot each column Duration(Min) for each dataframe from dictionary but I don't know how to deals with : DataFrameDict[key]['Duration(Min)']
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()
Solution
- Using
.ravel
to flatten theaxes array
is fairly common. math.ceil
will ensure there are enough rows, when the number of items to plot is not evenly divisible by the number of columns.- This
for-loop
iterates through the enumerateddict keys
, usingidx
to index the correct value fromax_array
, and using thekey
to plot each dataframe. pandas.DataFrame.plot
is used to plot the dataframe.
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()
Answered By - Trenton McKinney
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.