Построение 2D эффективности с помощью matplotlib - PullRequest
0 голосов
/ 28 февраля 2019

Я пытаюсь построить 2D (in) эффективность в matplotlib, мне нужно соотношение двух гистограмм.Я использую panda DF, чтобы заполнить их:

X_arr = np.array(df['X'])
Y_arr = np.array(df['Y'])

Xeff_arr = np.array(df['X'][(df['condition'] == 1)]
Yeff_arr = np.array(df['Y'][(df['condition'] == 1)]

plt.figure()

denom_histo, xedges, yedges = np.histogram2d(Y_arr, X_arr, bins=(100, 100))
eff_histo, xedges, yedges = np.histogram2d(Yeff_arr, Xeff_arr, bins=(100, 100), weights=-1)
ones, xedges, yedges = np.histogram2d(np.array(100*[1]), np.array(100*[1]), bins=(100, 100))

ineff_histo = ones - eff_histo
ineff_histo = ineff_histo / denom_histo

plt.show()

Мне нужна неэффективность, поэтому я вычисляю это как "1 - (data_passing_condition) / (all_data)". Также это предотвращает деление на ноль.

Но я получаю ошибки, такие как «ValueError: объект слишком малой глубины для нужного массива»

Не могли бы вы дать мне знать, как лучше всего работать с 2D-графиками в matplot?

Приветствия

1 Ответ

0 голосов
/ 13 марта 2019

после некоторой обработки я нашел это решение для работы:

def plot_eff2D(df):

        dfe = df[(df['Condition']==1)]

        x = np.array(df['X'])
        y = np.array(df['Y'])

        xe = np.array(dfe['X'])
        ye = np.array(dfe['Y'])

        fig = plt.figure()
        plt.title('Inefficiency map', fontsize=16)

        den, yedges, xedges = np.histogram2d(x, y, bins=100)
        num, _, _ = np.histogram2d(xe, ye, bins=(yedges, xedges))

        H = (den - num)/den  # 1-eff = inefficiency

        img = plt.imshow(H, interpolation='nearest', origin='low', vmin=0, vmax=0.2, extent=[xedges[0], xedges[-1], yedges[0], yedges[-1]])
        fig.colorbar(img, fraction=0.025, pad=0.04) # above plot H

        plt.tight_layout()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...