Source code for khipu.plot

try:
    import matplotlib.pyplot as plt
except:
    print("[khipu.utils] cannot import matplotlib, skipping.")

[docs]def plot_khipugram(df, savepdf='', relabel={}): '''Plot the khipu grid as diagram. df = KP.get_khipu_intensities() The trunk labels are updated here but not in KP instances, because we use the search adduct tables to index m/z distances to M+H+, and it's easier to keep the names consistent with the input tables. ''' _M, _N = df.shape zdata = [] for ii in range(_M): for jj in range(_N): zdata.append((jj, ii, df.iloc[ii, jj])) X = [d[0] for d in zdata] Y = [d[1] for d in zdata] S = [(np.log10(d[2]+1))**2 for d in zdata] trunk_labels = list(df.columns) _base = trunk_labels[0] trunk_labels = [_base] + [_base+","+x for x in trunk_labels[1:]] if relabel: trunk_labels = [relabel.get(x, x) for x in trunk_labels] fig, ax = plt.subplots() for jj in range(_N): ax.text(jj, -1, trunk_labels[jj], rotation=60) ax.plot([jj]*_M, range(_M), marker='o', linestyle='--', markersize=0.1) ax.plot([-1, _N+1], [0,0], linestyle='-', linewidth=2, color='k', alpha=0.3) ax.scatter(X, Y, c='red', s=S, alpha=0.8) for ii in range(_M): ax.text(_N+1.6, ii, df.index[ii]) ax.margins(0.2) ax.set_axis_off() ax.invert_yaxis() fig.tight_layout() if savepdf: plt.savefig(savepdf) else: plt.show()
[docs]def plot_json_khipu(jkp, figsize=(8,5), savepdf='', relabel={}): '''Plot the khipu from JSON dict as diagram. ''' # first remap grid from JSON isoList = sorted(set([peak['isotope'] for peak in jkp['MS1_pseudo_Spectra']])) isoList = ['M0'] + isoList[:-1] # move M0 to first position # needs work; still M10 may come before M2 adductList = sorted(set([peak['modification'] for peak in jkp['MS1_pseudo_Spectra']])) # K could be before M... itensDict = {} for peak in jkp['MS1_pseudo_Spectra']: itensDict[peak['ion_relation']] = peak['representative_intensity'] _M, _N = len(isoList), len(adductList) zdata = [] for ii in range(_M): for jj in range(_N): ion_relation = ','.join([isoList[ii], adductList[jj]]) # assuming ion_relation format zdata.append((jj, ii, itensDict.get(ion_relation, 1))) X = [d[0] for d in zdata] Y = [d[1] for d in zdata] S = [(np.log10(d[2]+1))**2 for d in zdata] trunk_labels = adductList # K could be before M... # _base = adductList[0] # trunk_labels = [_base] + [_base+","+x for x in trunk_labels[1:]] if relabel: trunk_labels = [relabel.get(x, x) for x in trunk_labels] fig, ax = plt.subplots(figsize=figsize) for jj in range(_N): ax.text(jj, -1, trunk_labels[jj], rotation=60) ax.plot([jj]*_M, range(_M), marker='o', linestyle='--', markersize=0.1) ax.plot([-1, _N+1], [0,0], linestyle='-', linewidth=2, color='k', alpha=0.3) ax.scatter(X, Y, c='red', s=S, alpha=0.8) for ii in range(_M): ax.text(_N+1.6, ii, isoList[ii]) ax.margins(0.2) ax.set_axis_off() ax.invert_yaxis() # ax.set_ylabel(jkp['interim_id']) fig.tight_layout() if savepdf: plt.savefig(savepdf) else: plt.show()