2017-04-04 5 views
0

내가 플롯 싶어 값 무리있다 : y 값의 범위에 따라,하기 matplotlib : 왜곡하려 축

{'A': 0.9823, 'B': 0.9133, 'C': 0.9987, 'D': 0.7332, 'E': 0.1345, 'F': 0.9235} 

이러한 직접적인 막대 그래프를 [0, 1], 매우 높은 볼 것 바, 그리고 더 짧은 것들 (D와 E). 내가 대신 가진 Y 표시 점의에 의해 높이에 변화의 표시를 강조하고 싶습니다 :

[0, 0.1, 0.2, 0.3...0.8, 0.9, 1] 

을 우리가 가지고 :

[0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.99, 0.999, 1] 

내가 문서를 검색 한, 그러나이 될 것 같다 없다 이것을하는 쉬운 방법.

실제로 이러한 값은 백분율이므로 배율 변경 또는 로그 눈금으로 변환하는 것은 효과가 없습니다.

+0

는 어떻게 예를 매핑 할 계획인가 첫 번째 값 0.9823에서 0.9와 0.99 사이의 세로 좌표 값? 선형 적으로? – klimaat

답변

1

나는 당신이 찾고있는 것이 데이터에 대한 변형이라고 생각하므로 하나에 더 가까운 값이 더 멀리 떨어져 있습니다. 이 작업을 수행 할 기능을위한 몇 가지 옵션이 있습니다, 내가 과거에 사용했던 하나입니다

formula

formula의 값이 여기에 1 근처의 값을 "스트레칭"의 양을 결정하는 경우 이 효과를 보여주는 몇 가지 코드입니다.

사용할 수있는 많은 변형 (기능)이 많이 있습니다.

내가 제공 한 진드기 레이블을 사용했음을 유의하십시오. 분명히 좋지는 않습니다 (아마도 너무 많을 것입니다). 희망이 도움이 당신에게 탐험 영역을 제공합니다.

Axes tranformations

import matplotlib.pyplot as plt 
import numpy as np 

data = {'A': 0.9823, 'B': 0.9133, 'C': 0.9987, 'D': 0.7332, 'E': 0.1345, 'F': 0.9235} 
yticks = np.array([0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.99, 0.999, 1]) 

fig, ax = plt.subplots(1,4, figsize=(16,4)) 

ax[0].bar(left=range(len(data)), height=np.array(data.values()), tick_label=data.keys()) 
ax[0].set_ylim(yticks[0], yticks[-1]) 
ax[0].set_title('Original scale') 

epsilon = .1 
ax[1].bar(left=range(len(data)), height=1/(1+epsilon-np.array(data.values())), tick_label=data.keys()) 
ax[1].set_yticks(1/(1+epsilon-yticks)) 
ax[1].set_yticklabels(yticks) 
ax[1].set_ylim(1/(1+epsilon-yticks[0]),1/(1+epsilon-yticks[-1])) 
ax[1].set_title(r'$\epsilon=0.5$') 

epsilon = .05 
ax[2].bar(left=range(len(data)), height=1/(1+epsilon-np.array(data.values())), tick_label=data.keys()) 
ax[2].set_yticks(1/(1+epsilon-yticks)) 
ax[2].set_yticklabels(yticks) 
ax[2].set_ylim(1/(1+epsilon-yticks[0]),1/(1+epsilon-yticks[-1])) 
ax[2].set_title(r'$\epsilon=0.1$') 

epsilon = .01 
ax[3].bar(left=range(len(data)), height=1/(1+epsilon-np.array(data.values())), tick_label=data.keys()) 
ax[3].set_yticks(1/(1+epsilon-yticks)) 
ax[3].set_yticklabels(yticks) 
ax[3].set_ylim(1/(1+epsilon-yticks[0]),1/(1+epsilon-yticks[-1])) 
ax[3].set_title(r'$\epsilon=0.05$') 

fig.show()