在python中分布可变轴网格长度的图

时间:2018-03-27 13:10:13

标签: python-3.x matplotlib plot

我编写了{3}的Python 3代码,以帮助我自动分析使用称为量热法(用于辐射剂量测定法)的技术生成的数据。在随附的示例中,输入文件的分析返回了第八个“加热区域”(顶部面板),并且在每个区域中对数据部分进行了一对线性回归(黑色部分,红色部分)以计算数据的大小。 'step',相对于我感兴趣的数量的平均值( thermistor 的变化电阻),它绘制在同一图的下面板中。< / p>

few lines

此类分析的结果总结在数据框架中(目前来自 numpy ndarray ),但理想情况下,我希望也能生成图形表示每个子图中都有一些注释,包括结果数据框中相应行的信息:

automatic identification of 8 heating regions (top panel) and computed relative step magnitude (bottom panel)

一般输出看起来像最后一个数字,每个子图包含来自前一个单独图的相同基本信息。

Step analysis via a pair of linear regressions and further computation

在Jupyter笔记本中使用这部分代码,手动创建,无需任何迭代:

%matplotlib inline
results_fig = pyplt.figure(figsize=(20,10))
results_grid = matplotlib.gridspec.GridSpec(2, 4, hspace=0.2, wspace=0.3)
results_fig.suptitle("Faceted presentation of calorimetric runs", fontsize=15)

ax1 = results_fig.add_subplot(results_grid[0,0])
ax1.scatter(time,resistance, marker ='o', s=20, c='blue')
ax1.plot(time[x1[0]:xmid[0]], line_pre[0], color='black', linewidth=3.0)
ax1.plot(time[xmid[0]:x4[0]], line_post[0], color='red', linewidth=3.0)
ax1.set_xlim(xlim1[0],xlim2[0])
ax1.set_ylabel("resistance [Ohm]")

# [... continues for each subplot in the grid ... ]

鉴于“加热区域”的数量可能因文件而异,即在分析每个实验输出数据文件之前无法确定,这里是我的一对问题:

  1. 如何在不事先了解它将显示多少个子图的情况下生成子图网格?网格的一个维度可以是四个,如此处提供的示例,但另一个是未知的。我可以迭代numpy结果数组的一个轴的长度,但是我需要在我的绘图网格中跨越两个轴。
  2. 没有重新发明轮子,是否有一个可以帮助这个方向的python模块?
  3. 由于

1 个答案:

答案 0 :(得分:0)

以下是如何创建n x 4个子图的网格并迭代它们

numplots = 10 # number of plots to create
m = 4         # number of columns
n = int(np.ceil(numplots/4.)) # number of rows

fig, axes = plt.subplots(nrows=n,ncols=m)
fig.subplots_adjust(hspace=0.2, wspace=0.3)

for data, ax in zip(alldata, axes.flatten()):
    ax.plot(data[0],data[1], color='black')
    # further plotting, label setting etc.

# optionally, remove empty plots from grid
if n*m > numplots:
    for ax in axes.flatten()[numplots:]:
        ax.remove()
        ##or 
        #ax.set_visible(False)