2012-10-24 26 views
2

最後編輯(部分解決方案):繪製離散,波詭雲譎的2D matplotlib陰謀與對數着色

經過大量的修修補補,我已經能夠做到我想要的東西。由於它繪製了17,000多個單獨的條形圖,因此它並不是一個快速的代碼。

解決方案

X = np.array(xvals) 
Y = np.array(yvals) 
Z = np.array(zvals) 
Y_bot = np.array(bottomvals) 

fig = plt.figure() 
ax = fig.add_subplot(111) 

jet = plt.get_cmap('jet') 

log_norm = colors.LogNorm() 

for x,y,z,bot in zip(X,Y,Z,Y_bot): 
    log_z = np.log10(z)/np.log10(max(Z)) 
    colour = jet(log_price) 
    ax.bar(x,y,bottom=bot, width=1, edgecolor='none',color=c_col) 

a = np.vstack((Z,Z)) 
im = plt.imshow(a, aspect='auto', cmap=jet, origin='lower', norm=log_norm) 
im.set_visible(False) 
plt.colorbar(format='%.1f') 
plt.axis([values]) 
plt.show() 

這是能夠成功地構建我想要的情節,它會自動執行彩條和格式它適當爲好。

----開始原來的問題----

我試圖合併對數彩色地圖一系列堆疊的條形圖中matplotlib(Python 2.7版)。實質上,每個「堆棧」值都有一個輔助值,我將對數變換應用於顏色映射,然後將其用作顏色映射的一部分。

有其運行以創建情節兩個循環:

import matplotlib.pyplot as plt 
import matplotlib.pyplot as plt 
import numpy as np 
import matplotlib.cm as cm 
import matplotlib.colors as colors 
import matplotlib.colorbar as cb 
import matplotlib.ticker as tk  

for i in range(1,x): 
    # get data for point i 
    for n, j in enumerate(data): 
     cval = log10(secondary value) 
     plt.bar(i,j, bottom=sum(j[:n]), color=cm.jet(cval) 

# Once it has all been plotted I want to set axis, titles and set up a color bar 
# To set up the color bar I'm currently using 

im = plt.imshow(a, aspect='auto',cmap=jet, origin='lower') 
im.set_visible(False) 
cbar = plt.colorbar() 

現在,問題是,這些值日誌改變的值(這是正確的,因爲這是我一直在使用繪製什麼數據)。

但是,我想要執行反轉換(例如10 ** x),並將那些值顯示在彩條上。

cbar.ax.get_yticklabels() # This gets text values, not floats 
cbar.ax.get_yticks() # This gets the positions 

我知道我可以使用更新ticklabels:

cbar.ax.set_yticklabels(new_ticks) 

不過,我想在某種程度上獲得蜱值的通用方法

到目前爲止,我已經嘗試使用做出改造。

返回的文本值的當前格式是:

Text(1,0,u'\u22121.6') # Corresponds to -1.6 in unicode (I think). 

任何援助將不勝感激,這已經做我的頭

到底應該是這個樣子(。請注意,我手動調節這些刻度值,軸標籤已被刪除,因爲它們是不重要)

enter image description here

編輯:

我也創建了數據的hexbin圖,你可以看到它是非常非常塊狀,一般凌亂的工作。

enter image description here

爲了概括上述問題。

(符號,Z =元素,Z =矢量陣列等)

我有兩個獨特的索引(X,Y)數據陣Z。

我想繪製z的每個值在由其兩個索引(x,y)指定的位置。 z應該以對數着色。我還想讓一個彩色條與這個陰謀一起繪製。理想情況下,空間應填充,類似於第一個堆疊的條形圖。

注意,X是一個整數數組(儘管類型是float),範圍從1.0到48.0。 但是,Y是無約束的浮點數,並且沒有順序將每個值鏈接到X.因此,我不確定這裏的等值線圖是否適用。

+1

您可能希望將您的解決方案置之不理,並將其作爲問題的答案發布。 – silvado

+0

根據要求添加silvado。 –

回答

1

經過很多修補後,我已經能夠完成我想要的。由於它繪製了17,000多個單獨的條形圖,因此它並不是一個快速的代碼。

解決方案

X = np.array(xvals) 
Y = np.array(yvals) 
Z = np.array(zvals) 
Y_bot = np.array(bottomvals) 

fig = plt.figure() 
ax = fig.add_subplot(111) 

jet = plt.get_cmap('jet') 

log_norm = colors.LogNorm() 

for x,y,z,bot in zip(X,Y,Z,Y_bot): 
    log_z = np.log10(z)/np.log10(max(Z)) 
    colour = jet(log_price) 
    ax.bar(x,y,bottom=bot, width=1, edgecolor='none',color=c_col) 

a = np.vstack((Z,Z)) 
im = plt.imshow(a, aspect='auto', cmap=jet, origin='lower', norm=log_norm) 
im.set_visible(False) 
plt.colorbar(format='%.1f') 
plt.axis([values]) 
plt.show() 

這是能夠成功地構建我想要的情節,它會自動執行彩條和格式它適當爲好。