Сглаженная цветовая карта Matplotlib в

Я рисовал четырехмерные данные для своей диссертации, используя цветовую карту на трехмерном графике, и столкнулся с осложнением. Может показаться, что метод цветовой карты, который я использую, усредняет значения в угловых точках, а затем окрашивает всю плитку в соответствии с этим значением. Это было бы хорошо, если бы у меня было большее разрешение, но мне потребовалось около месяца, чтобы запустить симуляции, чтобы получить мои текущие данные.

Может ли кто-нибудь предложить способ изменить это? Желательно не кодировать собственную линейную интерполяцию всех точек для увеличения разрешения. Это, вероятно, больше усилий (для меня), чем стоит на данный момент.

Driven=np.zeros((5,9))
Driver=np.zeros((5,9))
Compositions=np.zeros((5,9))
Durations=np.zeros((5,9))
N=np.zeros((5,9))
for i in range(0,5):
    for j in range(0,9):
        Driven[i,j]=ReservoirData[i][1][j]
        Compositions[i,j]=ReservoirData[i][2][j]
        Driver[i,j]=float(ReservoirData[i][0][0][:-3])
        Durations[i,j]=ReservoirData[i][3][j]
maxi=Durations.max()
mini=Durations.min()
for i in range(0,5):
    for j in range(0,9):
        N[i,j]=(Durations[i,j]-mini)/(maxi-mini)

fig = plt.figure() 
ax = fig.gca(projection='3d')

#Important Stuff    Start----------------------------------------------------

surf = ax.plot_surface(Driven,Driver,Compositions, facecolors=cm.jet(N), rstride=1, cstride=1, antialiased=True)
m = cm.ScalarMappable(cmap=cm.jet)

#Important Stuff End---------------------------------------------------------

m.set_array(Durations)
cbar=plt.colorbar(m, shrink=0.8)
cbar.set_label('Nominal Duration')
ax.set_ylabel('Driver Pressure, kPa')
ax.set_xlabel('Compositions, %He')
ax.set_zlabel('Driven Pressure, kPa')
plt.title('Three Dimensional Representation of Tailored Conditions for RS at 9.2MPa')
fig.set_size_inches(14,8)
plt.savefig('RS9.2.png')

введите здесь описание изображенияПриветствуются любые мнения, спасибо!


person Morgan Meeuwissen    schedule 15.10.2013    source источник
comment
На подобные вопросы вы получите лучшие ответы, если приведете полный РАБОЧИЙ пример. Вам не хватает includes и определения ReservoirData. Возможно, вы захотите попробовать создать минималистичный игрушечный пример вашей проблемы.   -  person Hooked    schedule 15.10.2013


Ответы (1)


По моему опыту, matplotlib, скажем так, не идеален для создания 3D-графиков. Из-за подобных проблем я для этой цели переключился на mayavi (ссылка); это уже может помочь вам (и выглядит красиво!). При необходимости в scipy.interpolate есть удобные инструменты интерполяции, чтобы "увеличить" плотность данных, проверьте их здесь.

Я всегда отмечаю реальные данные измерений на поверхности интерполяции (правда, только 2D) для ясности; это может быть осуществимо и для вас.

person Faultier    schedule 15.10.2013
comment
Спасибо, я не подумал о майави, я видел его раньше, но никогда не пробовал. Я рассмотрю эти методы, но я не совсем заинтересован в использовании интерполяции для поиска гладкой поверхности, и добавление реальных данных к этой поверхности, вероятно, потребует времени, чтобы я понял правильно. - person Morgan Meeuwissen; 16.10.2013