2017-05-16 156 views
0

本網站過去曾提出類似問題 - 如Representing 4D data in mplot 3D using colormapsHow to make a 4d plot using Python with matplotlib - 但據我所知,它們都沒有解決我的具體問題。Python中4D向量的可視化

我有以下數據在我的處置:

x1 = numpy.logspace(-100, 20, num=13, base=2) 
x2 = numpy.logspace(-100, 20, num=13, base=2) 
x3 = numpy.logspace(-5, 5, num=11, base=10) 

y = [...] 

因此,使2個向量13組的元素,並用11個元件的一個向量。然後y是13 * 13 * 11變量:對於來自x1,x2和的元素的每種組合,我在y中有相應的值。

我想知道是否有任何優雅的方式在Python中可視化這些數據;我曾想過將3D圖與顏色映射結合起來,就像在我發佈的鏈接中那樣,但是在這些帖子中給出的例子中,第三個變量 - - 是其他2的函數,而在我的情況下,它是y即函數爲x1,x2和。

是否有任何方法/技巧在單個圖表或儘可能少的圖表中實現此目的?

編輯:一個想法可能是繪製例如11種色彩映射表,其中,每個顏色表對應於的值。一個虛擬的例子:

Multiple color maps

這怎麼可能實現?

+0

一種選擇是在3D繪製彩色立方體,如提出[在這個問題上(HTTP://計算器的.com /問題/ 40853556/3D-離散熱圖合matplotlib)。雖然我不確定,但如果這是一個有用的陰謀,請求的人對此非常高興。你也可以考慮繪製不同顏色的小球等等。一個問題是,這種問題真的很難回答,迫使人們真正猜出什麼是合適的。所以我認爲你需要想出一個你想要的情節,然後問如何在matplotlib中獲得它。 – ImportanceOfBeingErnest

+0

@ImportanceOfBeingErnest當你在你的回答中陳述時,確實很難看到那裏的任何東西。 –

+0

你明白了我的觀點吧?這完全取決於你想要什麼,我們不能猜測。 – ImportanceOfBeingErnest

回答

1

粗略地說,你可以做這樣的事情:

import matplotlib.pyplot as plt 
import numpy as np 

x1 = np.logspace(-100, 20, num=13, base=2) 
x2 = np.logspace(-100, 20, num=13, base=2) 
x3 = np.logspace(-5, 5, num=11, base=10) 
y = np.random.rand(len(x3), len(x2), len(x1)) 

fig, axes = plt.subplots(ncols=4, nrows=3) 
fig.subplots_adjust(right=0.8, wspace=0.25, hspace=0.05) 
for i, ax in enumerate(axes.flatten()): 
    if i < len(x3): 
     ax.set_xticks([0,6,12]) 
     ax.set_yticks([0,6,12]) 
     ax.set_yticklabels([]); ax.set_xticklabels([]) 
     im = ax.imshow(y[i, :,:], vmin=0, vmax=1, aspect="equal") 
     if i % 4 == 0: 
      ax.set_yticklabels([r"$2^{-100}$",r"$2^{-40}$",r"$2^{20}$"]) 
     if i >=8: 
      ax.set_xticklabels([r"$2^{-100}$",r"$2^{-40}$",r"$2^{20}$"])  
    else: 
     ax.axis("off") 

nax = fig.add_subplot(111, frame_on=False) 
nax.set_xticks([]) 
nax.set_yticks([]) 
nax.set_xlabel('xlabel', labelpad=20) 
nax.set_ylabel('ylabel', labelpad=40) 

cbar_ax = fig.add_axes([0.85, 0.15, 0.02, 0.7]) 
fig.colorbar(im, cax=cbar_ax) 

plt.show() 

enter image description here

+0

謝謝@ImportanceOfBeingErnest,這個工程。最後兩件事:如何在輸出中添加_single_顏色條?你會如何在所有地圖的底部('x'軸)和地圖左側('y'軸)添加一個標籤? –

+1

我更新了答案。你還需要對數標籤的幫助嗎? – ImportanceOfBeingErnest

+0

那麼這將是偉大的@ImportanceOfBevenErnest!但也許不是整個標籤,而是來自'x1'和'x2'的第一,中間和最後一個值。 –