Pandas.DataFrameGroupBy分组子图绘制未达预期效果
问题:多子图绘图时所有图表堆叠在同一行,且多种解决方案触发无限循环
这是原提问的重开帖,原帖因被判定为重复帖关闭,但所有推荐的重复帖均无法解决问题,故再次发帖。
我有一个从hdf文件读取的、关联多台设备的时间序列DataFrame,代码如下:
from matplotlib import pyplot as plt import numpy as np import pandas as pd from pandas import DataFrame def open_dataset(file_name: str, name: str, combined_frame: DataFrame): data_set: DataFrame = pd.read_hdf(file_name, key=name) data_set['name'] = name combined_frame = pd.concat([combined_frame, data_set], axis=0) return combined_frame if __name__ == '__main__': names = ['YRT1IN1E', 'YRT1LE1', 'YRT1MH1', 'YR08DT1ML'] working_frame = DataFrame() for name in names: working_frame = open_dataset('data.h5', name, working_frame) grouped_frame = working_frame.groupby('name') fig, axs = plt.subplots(figsize=(10, 5), nrows=4, ncols=1, gridspec_kw=dict(hspace=0), sharex=True) axs = grouped_frame.get_group('YR08DT1ML').rawsum.plot() axs = grouped_frame.get_group('YRT1LE1').voltage.plot() axs = grouped_frame.get_group('YRT1MH1').current.plot() axs = grouped_frame.get_group('YRT1IN1E').current.plot() plt.show()
上述代码生成的输出中,所有绘图都堆叠在同一行,我希望每个图单独占一行,请问哪里出错了?
我尝试过以下方法,但均触发无限循环,无法正常绘图:
- 指定子图位置的方法:
fig, axs = plt.subplots(nrows=2, ncols=2) grouped_frame.get_group('YR08DT1ML').rawsum.plot(ax=axs[0,0]) grouped_frame.get_group('YR...').rawsum.plot(ax=axs[0,1]) grouped_frame.get_group('YR...').rawsum.plot(ax=axs[1,0]) grouped_frame.get_group('YR...').rawsum.plot(ax=axs[1,1])
变体写法得到和原代码一样的结果:
axes[0,0] = grouped_frame.get_group('YR08DT1ML').rawsum.plot() axes[0,1] = grouped_frame.get_group('YR...').rawsum.plot() ...
- 使用
subplots=True参数:
grouped_frame.get_group('YR08DT1ML').rawsum.plot(subplots=True, layout=(1,2)) ...
- 手动添加子图:
fig=plt.figure() ax1=fig.add_subplot(4,1,1) ax2=fig.add_subplot(4,1,2) ax3=fig.add_subplot(4,1,3) ax4=fig.add_subplot(4,1,4) grouped_frame.get_group('YR08DT1ML').rawsum.plot(ax=ax1) ...
我猜测问题可能和使用pandas.DataFrameGroupBy而非直接用pandas.DataFrame绘图有关。
内容的提问来源于stack exchange,提问作者WolfiG
相关产品推荐
相关产品推荐

