2013-08-16 2 views
0

분산 형 그래프에 데이터 요소를 플롯하고 두 개의 선을 그립니다. 선들이 줄의 가장자리로 가도록하여 왼쪽 상단에 몇 개의 데이터 점을 포함하는 상자를 만듭니다. 그러나 줄거리가 항상 줄 끝 부분을 초과하여 공간을 추가하므로 상자가 아니라 직각으로 두 줄이 있습니다. 누구든지이 공간을 추가하는 것을 멈추는 방법을 알고 있습니다. 그래서 가로줄이 y 축으로 가고 세로줄이 줄을 만들어 상자를 만듭니다.파이썬에서 분산 형 그래프의 선 그리기

내 코드

import pyfits 
import numpy as np 
import math 
from numpy.lib import scimath 
scimath.log(-math.exp(1)) == (1+1j*math.pi) 
import matplotlib.pyplot as plt 

###---COLOUR COLOUR PLOTS 

path2 = "/data/nhine/colour_plots/" 


##my data 
hdulist = pyfits.open(path2 + 'colour_plots_z1_final.fits') 
hdulist1 = pyfits.open(path2 + 'colour_plots_z1_5_final.fits') 
hdulist2 = pyfits.open(path2 + 'colour_plots_z5_final.fits') 

table = hdulist[1] 
table1 = hdulist1[1] 
table2 = hdulist2[1] 

col1_1 = np.array(table.data.field('col1')) #KAB - IRAC1 
col2_1 = np.array(table.data.field('col2')) #HAB - KAB 
col3_1 = np.array(table.data.field('col3')) #REDMAG 
col4_1 = np.array(table.data.field('col4')) #IRAC1-IRAC2 
col1_15 = np.array(table1.data.field('col1')) 
col2_15 = np.array(table1.data.field('col2')) 
col3_15 = np.array(table1.data.field('col3')) 
col4_15 = np.array(table1.data.field('col4')) 
col1_5 = np.array(table2.data.field('col1')) 
col2_5 = np.array(table2.data.field('col2')) 
col3_5 = np.array(table2.data.field('col3')) 
col4_5 = np.array(table2.data.field('col4')) 

##lines 
x = np.array([1.6,1.6,1.6,1.6,1.6,1.6,]) 
y = np.array([2.15,2.25,2.4,2.5,2.6,2.7,]) 
w = np.array([0.7,0.8,1.0,1.2,1.4,1.6]) 
z = np.array([2.15,2.15,2.15,2.15,2.15,2.15]) 

##C12 data 

qso6a = np.array([1.5]) 
qso6b = np.array([2.25]) 
gal6a = np.array([0.7]) 
gal6b = np.array([2.4]) 
all35a = np.array([1.5,1.16,1.8,2.4,2.55,2.6,2.7,2.78,2.9]) 
all35b = np.array([2,1.6,1.9,1.35,0.9,1.25,1.65,1.1,1.3]) 
less1a = np.array([2.4,2.9,3.3,3.309]) 
less1b = np.array([1.3,0.7,1.75,1.35]) 

##plot 

from pylab import * 


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

ax1.scatter(col2_5, col1_5, s=50, c='g', marker="s", label='Targets at z>5') 
ax1.scatter(gal6a, gal6b, s=50, c='g', marker="o", label='C12 galaxy at z~6') 
ax1.scatter(qso6a, qso6b, s=50, c='g', marker="d", label='C12 QSO at z~6') 
ax1.scatter(col2_15, col1_15, s=50, c='r', marker="s", label='Targets at 1<z<5') 
ax1.scatter(all35a, all35b, s=50, c='r', marker="o", label='C12 at 3<z<5') 
ax1.scatter(col2_1, col1_1, s=50, c='b', marker="s", label='Targets at z<1') 
ax1.scatter(less1a, less1b, s=50, c='b', marker="o", label='C12 z<1') 

plot(x,y, color='b') 
plot(w,z, color='b') 
legend(loc='best', numpoints=1, ncol=1, fontsize=8) 
ttext = title('Colour-colour plot') 
ytext = ylabel('K - IRAC1') 
xtext = xlabel('H - K') 
setp(ttext, size='large', color='black', style='italic') 
setp(xtext, size='medium', weight='light', color='black') 
setp(ytext, size='medium', weight='light', color='black') 
show() 

hdulist.close() 
hdulist1.close() 
hdulist2.close() 

답변

0

당신은 당신이 당신의 '상자'plot(...,scalex=False,scaley=False)을 사용하여 그릴 때 다시 조절되는 축을 방지 할 수있다.

그러나, 나는 : 예컨대, 당신이 당신의 지점을 개설하는 Rectangle 같은 것을 사용

from matplotlib.pyplot import Rectangle 
mybox = Rectangle((0.7,2.15), 0.9, 0.55, fill=False, ec='b') 
ax1.add_artist(mybox) 

을 제안 아니면 당신이 한 번 봐 걸릴 수 있습니다 다양한 공상 상자와 화살표를 포함 matplotlibtools for annotation.

+0

감사합니다. 정말 잘됩니다. – nancyh