2016-04-14 11 views
1

Birden fazla renk kullanarak x eksenindeki bir bölgeyi vurgulamaya çalışıyorum. Bu şekilde gösterildiği gibi x ekseni boyunca bölgeyi bölümlere ayırarak bir çözüm bulmayı başardım: enter image description herePyplot axvspan: Tek bir aralıkta birden fazla renk (dikey)

Ancak, bölümün y ekseninde gerçekleştiği bir çözüm istiyorum. Örnek olarak arsada 6362'i alın. Kesikli bir çubuk gibi bir şey yaratmanın bir yolu var mı? Her diğer çizgi (ya da her ne denirse) mor ve kırmızı?

Düzenleme Burada yatay

# Find exon's index 
e_index = sorted(list(all_samples.ensembl_exon_id.unique())).index(exon) 

# Total x-axis span incl offsets 
xmin = e_index-0.25 # Start of x-span 
xmax = e_index+0.25 # End of x-span 
diff = xmax-xmin  # Length of entire span 
buf = diff/len(s_names) # Length of each subsection 

# Go through each sample 
for sname in s_names: 
    # Get color of this sample 
    s_color = colors[sname] 

    # Get index of this sample 
    order = list(s_names).index(sname) 

    # Calc xmin and xmax for subsection 
    s_xmin = xmin + (buf * order) 
    s_xmax = s_xmin + buf 

    # Highlight 
    plt.axvspan(xmin=s_xmin, xmax=s_xmax, alpha=0.25, color=s_color, zorder=0.6, ymin=0, ymax=1) 
+0

Ne düşündüğümü yamaları kullanarak bu inşa etmek gerekecek. – armatita

+0

@armatita Pekala, yamalar içerisine bakacağım, teşekkürler. Bir göz atmak istiyorsanız, şu anda vurgulamayı yaptığım için kodu ekledim. – Plasma

cevap

2

Bu her bir "çizgi" oluşturmak için axvspan için ymin ve ymax seçenekleri kullanarak yapabilirsiniz her alt bölüm vurgulamak için ilgili kod. 0-1 eksenleri üzerinden döngü yaparak, tüm tire çizgilerinizi oluşturabilirsiniz.

Biraz otomatikleştirmek için bir araya getirdiğim hızlı bir işlev. Bölgeyi tire işaretleriyle doldurmak için gerekli seçeneklerinizle vspandash numaralı telefonu arayın. http://matplotlib.org/examples/shapes_and_collections/artist_reference.html kodunuzu ve veri görmeden daha söylemek zor:

import matplotlib.pyplot as plt 
import numpy as np 

fig,ax = plt.subplots(1) 

x=y=np.arange(11) 

ax.plot(x,y,'go-') 

def vspandash(thisax,xmark,xwidth=0.6,ndash=10,colour1='r',colour2='m'): 

    interval = 1./ndash 
    hxwidth = xwidth/2. 

    for j in np.arange(0,1,interval*2): 
     thisax.axvspan(
       xmin=xmark-hxwidth,xmax=xmark+hxwidth, 
       ymin=j,ymax=j+interval, 
       facecolor=colour1,alpha=0.25,edgecolor='None' 
       ) 
     thisax.axvspan(
       xmin=xmark-hxwidth,xmax=xmark+hxwidth, 
       ymin=j+interval,ymax=j+interval*2., 
       facecolor=colour2,alpha=0.25,edgecolor='None' 
       ) 

# Lets explore the different options 
vspandash(ax,2)       # Default width, number of dashes, and colours 
vspandash(ax,4,ndash=20)     # Increase number of dashes 
vspandash(ax,6,xwidth=0.3)    # Change width of shaded region 
vspandash(ax,8,colour1='b',colour2='g') # Change colours of dashes 

plt.show() 

enter image description here