Изменить Y-тики и внешний вид столбцов в mplot3d-BarPlot - PullRequest
0 голосов
/ 21 февраля 2019

Я работаю над 3D Barplot для построения графика энергии разных частотных диапазонов и сравнения их с другими образцами.Кодекс показывает мое текущее состояние работы.Однако, я не получаю правильные y-тики, я хотел бы, чтобы они были похожи на соответствующий частотный диапазон, и я застрял в этом.Вторая проблема: я бы хотел иметь скеры одинакового размера вместо прямоугольных полос.Я пытался изменить dx / y и x / ypos, но это не похоже на работу.Может быть, кто-то может помочь мне здесь.Но я также открыт для идей относительно более подходящих графиков для сравнения энергии полос частот этих четырех выборок, если у вас есть какие-либо предложения, я буду рад их услышать!

С наилучшими пожеланиями, Бастиан

Frequency_mean_std_df - это pd-DataFrame с 86 частотными диапазонами (энергия-значение) для каждого образца (и некоторыми другими вещами, которые здесь не важны)

x=np.linspace(0, 10, 86)
data_list=[]
for i in np.arange(86):
data = [
np.log(Frequency_mean_std_df['w01_HvR_01_mean'] [i]),
np.log(Frequency_mean_std_df['w02_HvR_01_mean'] [i]),
np.log(Frequency_mean_std_df['w03_HvR_01_mean'] [i]),
np.log(Frequency_mean_std_df['w04_HvR_01_mean'][i])]

data_list.append(data)
data_array = np.array(data_list)
data = data_array
column_names = ['HvR_01','HvR_02','HvR_03','HvR_04']
row_names = x

fig = plt.figure()
ax = Axes3D(fig)

lx = len(data[0])            # Work out matrix dimensions
ly = len(data[:, 0])
xpos = np.arange(0, lx, 1)    # Set up a mesh of positions
ypos = np.arange(0, ly, 1)
xpos, ypos = np.meshgrid(xpos, ypos)

xpos = xpos.flatten()   # Convert positions to 1D array
ypos = ypos.flatten()
zpos = np.zeros(lx*ly)

dx = np.ones_like(zpos)
dy = dx.copy()
dz = data.flatten()

cs = ['r', 'g', 'b', 'y'] * ly

ax.bar3d(xpos, ypos, zpos, dx, dy, dz, color=cs)
ax.w_xaxis.set_ticklabels(column_names)
ax.w_yaxis.set_ticklabels(row_names[0:85])
ax.set_xlabel('Samples')
ax.set_ylabel('Frequency [Hz]')
ax.set_zlabel('Energy [log_dB]')

plt.show()

ИзображениеФактический участок

...