import sys import matplotlib.pyplot as plt import numpy as np import pandas def main(): df = pandas.read_csv(sys.argv[1]) # normalize columns columns = df.columns data = df.values.astype(float) norm = data.sum(axis=0) norm[norm == 0] = 1 df = pandas.DataFrame(data / norm) df.columns = columns # reorder for better clustering def swap(x, y): nonlocal df columns = list(df.columns) columns[x], columns[y] = columns[y], columns[x] df = df.reindex(columns=columns) df.iloc[x], df.iloc[y] = df.iloc[y].copy(), df.iloc[x].copy() swap(1, 4) swap(-4, -2) swap(5, 8) swap(5, 7) swap(2, 4) swap(4, 6) swap(-5, -3) plt.pcolor(df, cmap="gray") plt.yticks(np.arange(0.5, len(df.columns), 1), df.columns, fontsize=24) plt.xticks(np.arange(0.5, len(df.columns), 1), df.columns, fontsize=24) plt.show() if __name__ == "__main__": sys.exit(main())