MatPlotLib взорвать наибольшее значение массива - PullRequest
2 голосов
/ 12 апреля 2020

Я создаю массив песен BPM (ударов в минуту) и хотел бы взорвать наибольший ударов в минуту, независимо от того, где он попадает в массив. Я использую python и matplotlib, кто-нибудь знает, чтобы настроить это?

Пример кода ниже

import numpy as np
import matplotlib 
from matplotlib import pyplot as plt

beat = np.array([180,33,46,76,88,222])

plt.pie(beat, explode=explode)
plt.show

Ответы [ 2 ]

2 голосов
/ 12 апреля 2020

Вы можете использовать следующее решение с одним вкладышем в самой команде plot

plt.pie(beat, explode=(beat == max(beat)) * 0.1)

Объяснение

Строка (beat == max(beat)) приведет к массиву логических значений это будет True, где массив будет иметь максимум

array([False, False, False, False, False, True])

Затем вы умножаете его на коэффициент разнесения (скажем, 0,1), который даст следующий массив, который вы можете напрямую передать в explode аргумент

array([0. , 0. , 0. , 0. , 0. , 0.1])
1 голос
/ 12 апреля 2020

np.argmax может найти индекс наибольшего удара. Затем этот индекс можно использовать для установки коэффициента explode.

import numpy as np
import matplotlib
from matplotlib import pyplot as plt

beat = np.array([180, 33, 46, 76, 88, 222])
explode = np.zeros(len(beat))
explode[beat.argmax()] = 0.1
plt.pie(beat, labels=beat, explode=explode)
plt.show()

resulting plot

...