최종 편집 (부분 솔루션) : 땜질이 많이 나는 내가 원하는 것을 달성 할 수있었습니다 후플로팅 이산, 덩어리 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).
어떤 도움을 크게 감상 할 수있다, 이것은 내 머리를하고있다 그것의 모양은을 결국
(. 그들이 중요하지 않은 것처럼 내가 수동으로 틱 값을 조정 한,주의, 축 레이블은
) 제거 된3210 편집 :데이터의 헥빈빈 플롯을 만들었습니다. 매우 거칠고 작업하기가 지저분하다는 것을 알 수 있습니다.
는 위의 문제를 일반화합니다.(표기 Z = 요소, Z = 벡터 어레이 등)
I는 두 고유 인덱스 (X, Y)와, 데이터 어레이 Z있다.
두 인덱스 (x, y)로 지정된 위치에 z의 각 값을 플로팅하고 싶습니다. z는 대수적으로 착색되어야합니다. 나는이 색조로 플롯 될 칼라 바를 추가로 좋아할 것이다. 이상적으로는 첫 번째 스택 막 대형 차트와 비슷한 공백을 채워야합니다.
참고로 X는 1.0에서 48.0 범위의 정수 배열입니다 (유형은 float 임). 그러나 Y는 제약이없는 플로트이며 각 값을 X에 연결하는 순서가 없습니다. 따라서 윤곽 플롯을 여기에 적용 할 수 있는지 확실하지 않습니다.
문제의 해결책을 풀어 질문에 대한 대답으로 게시 할 수 있습니다. – silvado
요청 된 silvado로 추가되었습니다. –