2013-10-15 4 views
0

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

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

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') 

enter image description here Любые мнения приветствуются, спасибо!

+0

Для вопросов, подобных этим, вы получите более качественные ответы, если вы дадите полный пример РАБОТЫ. Вам не хватает 'includes' и определение' ReservoirData'. Возможно, вы захотите попытаться создать минимальный пример вашей игрушки. – Hooked

ответ

1

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

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

+0

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

Смежные вопросы