2014-05-14 2 views
1

이것은 아마도 내가 만들려고하는 비정상적인 그래프 일 수 있으므로 그림을 첨부했습니다. Matplotlib에서 가능한지 확실하지 않아서 어떻게해야하는지 여기에서 물어볼 것이라고 생각했습니다.히스토그램이 아래쪽과 옆면에있는 선 그래프

http://i.imgur.com/96JRIN2l.jpg

기본적 I 양쪽에서 Y에 대해 축선을 동일하게 유지하면서, 옆으로 그리고 위쪽에 (hist())와 히스토그램 플롯 (plot())와 선 그래프 오버레이하려는 .

또한 히스토그램의 불투명도가 낮을 ​​경우에만 작동한다고 생각합니다. 불투명도가 그림 대신에 플롯별로 설정 될지 여부는 확실하지 않습니다. 지금까지

코드 :

import numpy as np 
import matplotlib.pyplot as plt 
import numpy as np 

fig = plt.figure() 
ax1 = fig.add_subplot(111) 
line = [0.2, 0.3, 0.37, 0.4, 0.6, 0.7, 0.72, 0.75, 0.77, 0.78, 0.79, 0.795] 
distribution = [0.2, 0.3, 0.3, 0.4, 0.7, 0.7, 0.7, 0.8] 

plt.hist(distribution, orientation='horizontal') 
plt.plot(range(len(line)), line, color='grey') 

plt.savefig("test.png") 

히스토그램이 표시되지 않습니다.

어떻게하면됩니까?

+0

그래서 당신은 X 축, 또는 히스토그램의 단지 불투명도를 공유하는 방법을 생각하지 않은 문제는? – mauve

+1

죄송합니다. 분명히해야합니다. 문제는 1) 오른쪽에 옆으로 히스토그램을 작성하는 방법, 2) 불투명도를 줄이는 방법, 3) 오버레이 선 그림을 만드는 방법입니다. x 축을 전혀 공유 할 필요가 없습니다. – lollercoaster

+0

불투명도를 "알파"라고합니다 - 값은 0-1이고 1은 불투명합니다.나는 히스토그램을 옆으로 흔드는 데 문제가있다. – mauve

답변

3

당신은 그냥 A-않은 사용 중간 축을 만들고, 그러나 이것은 한 무리의 관심이 소요 뒤에를-the-이 을 할 수있는 방법은 아마이 있습니다 (두 개의 독립적 인 축을 얻기 위해 두 번 twinx/twiny를 사용할 필요가 당신을 위해 장면의 세부 사항) :

import matplotlib.pyplot as plt 
import numpy as np 

line = [0.2, 0.3, 0.37, 0.4, 0.6, 0.7, 0.72, 0.75, 0.77, 0.78, 0.79, 0.795] 
distribution = [0.2, 0.3, 0.3, 0.4, 0.7, 0.7, 0.7, 0.8] 

fig, ax = plt.subplots(1, 1) 

ax2 = ax.twinx() 
ax3 = ax2.twiny() 

ax.plot(line) 
ax.set_xlabel('line xaxis') 
ax.set_ylabel('line yaxis') 

ax3.hist(distribution, orientation='horizontal', alpha=.5) 
ax3.invert_xaxis() 
ax3.set_xlabel('hist xaxis, note where 0 is') 
# note this needs to be ax2 due to subtle overlay issues.... 
ax2.set_ylabel('hist yaxis') 
plt.draw() 

당신은 축의 세부 사항 (제한, 라벨, 틱 요법)으로 재생해야하지만 axax3는 독립적이며 당신은 각각 독립적으로 표준 전술을 적용 할 수 있습니다.

enter image description here

1

여기에 부분적인 해결책이 있습니다. 막대 그래프 대신 히스토그램을 사용했는데, 히스토그램을 옆으로 배치하고 겹쳐서 표시 할 수 없었기 때문입니다.

from pylab import figure, show 
import numpy as np 
import matplotlib.pyplot as plt 

people = ('Tom', 'Dick', 'Harry', 'Slim', 'Jim') 
y_pos_hist = np.arange(len(people)) 
performance = 10*np.random.rand(len(people)) 

x_for_line = np.linspace(0,10) 
y_for_line = np.cos(x_for_line) 

fig = figure() 
ax1 = fig.add_subplot(111) 
ax2 = ax1.twinx() 


ax1.plot(x_for_line, y_for_line) 
ax2.barh(y_pos_hist, performance, alpha=0.2) 
#alpha = 0.2 is what changes the opacity of the bars 

plt.yticks(y_pos_hist, people) 

plt.show() 

enter image description here

막대 차트 부분 this example

I이 코드를 사용

Consider this example, too

+0

흠, y 축을 공유하는 방법은 없나요? 그리고 오른쪽에 막대 그래프가있는 것은 이상적으로 내가 쓰레기 수 등을 바꾸고 싶습니다. – lollercoaster

2

에서이며, 잘 표현하지만, 그때로 축을 사용하려 전환 조금 더 캐논과 조금 덜 놀랍습니다. 축을 사용하여 플롯 할 때 아티스트 객체를 생성하지만 plt를 사용하여 플롯하면 아티스트 객체의 목록을 생성합니다.

import numpy as np 
import matplotlib.pyplot as plt 
import numpy as np 

fig = plt.figure() 
ax = plt.gca() 

line = [0.2, 0.3, 0.37, 0.4, 0.6, 0.7, 0.72, 0.75, 0.77, 0.78, 0.79, 0.795] 
distribution = [0.2, 0.3, 0.3, 0.4, 0.7, 0.7, 0.7, 0.8] 

ax.hist(distribution, orientation='horizontal', alpha=.5) 
ax.plot(np.linspace(0,4,len(line)), line, color='grey', linewidth=2) 

plt.show() 

그 너머 enter image description here

, 그것은 당신이보고 싶은 다른 어떤 기능 명확하지 않다! matplotlib에는 여러 가지 훌륭한 도구가 있으며 축 중심의 관점을 가지면 상황이 좀 더 명확 해집니다.