2012-10-24 3 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에서 누적 막 대형 차트의 일련의 대수 색상 맵을 통합하려고 시도하고 (파이썬 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

) 제거 된3210 편집 :

데이터의 헥빈빈 플롯을 만들었습니다. 매우 거칠고 작업하기가 지저분하다는 것을 알 수 있습니다.

enter image description here

는 위의 문제를 일반화합니다.

(표기 Z = 요소, Z = 벡터 어레이 등)

I는 두 고유 인덱스 (X, Y)와, 데이터 어레이 Z있다.

두 인덱스 (x, y)로 지정된 위치에 z의 각 값을 플로팅하고 싶습니다. z는 대수적으로 착색되어야합니다. 나는이 색조로 플롯 될 칼라 바를 추가로 좋아할 것이다. 이상적으로는 첫 번째 스택 막 대형 차트와 비슷한 공백을 채워야합니다.

참고로 X는 1.0에서 48.0 범위의 정수 배열입니다 (유형은 float 임). 그러나 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() 

이 성공적으로 내가 원하는 플롯을 구성 할 수 있습니다, 그것은 자동으로 색상 막대 적절뿐만 아니라 형식을한다.

관련 문제