2017-12-20 4 views
0

, 나는 그런 X 축에 주석을해야합니다에만 히스토그램에서 0에 대해 별도의 빈이 이후의 나머지 동안 는 enter image description herematplotlib 축의 값 범위를 어떻게 레이블 할 수 있습니까? 내 히스토그램에서

"0"레이블은 두 눈금 사이에 걸쳐있다 축은 다른 저장소의 경계를 나타 내기 위해 선형입니다. 언더 브래킷은 중요하지 않지만 전체 빈에 대해 "0"이라는 표시가 있어야합니다.

내가 찾은 가장 가까운 해결책은 "직접 그려보세요"(How to add group labels for bar charts in matplotlib?)입니다. 축에 대해서 .axvspan() (.axvline()은 틱을 나타냄)과 동등한 것을 찾고 있는데, 이는 .axvspan() 라벨을 지정하는 것과 같습니다.

답변

2

" 축에 대해 .axvspan()에 해당하는 것이 없습니다. 입니다. 또한 ".axvline()""틱의 경우"이 아닙니다. 또한 라벨을 지정하려는 의도가 없습니다. .axvspan().

그럼 음모 아래에 빨간색 괄호를 만드는 방법에 대한 질문에 대답 해 봅시다. 기본적으로 선을 브래킷 형태로 플롯하고 xaxis 변환에 따라 위치시킬 수 있습니다. 다음은이를 수행하는 함수입니다.

import matplotlib.pyplot as plt 
import numpy as np 

fig, ax = plt.subplots() 
ax.bar(range(-1,5),range(3,9), width=1, align="edge", ec="k", alpha=1) 
ax.set_xticks(range(1,6)) 


def bracket(ax, pos=[0,0], scalex=1, scaley=1, text="",textkw = {}, linekw = {}): 
    x = np.array([0, 0.05, 0.45,0.5]) 
    y = np.array([0,-0.01,-0.01,-0.02]) 
    x = np.concatenate((x,x+0.5)) 
    y = np.concatenate((y,y[::-1])) 
    ax.plot(x*scalex+pos[0], y*scaley+pos[1], clip_on=False, 
      transform=ax.get_xaxis_transform(), **linekw) 
    ax.text((0.5+pos[0])*scalex, (y.min()-0.01)*scaley+pos[1], text, 
       transform=ax.get_xaxis_transform(), 
       ha="center", va="top", **textkw) 

bracket(ax, text="0", pos=[-1,-0.01], linekw=dict(color="crimson", lw=2)) 
plt.show() 

enter image description here

+0

다음 "을 yorself 그려" – abukaj

관련 문제