2016-04-14 6 views
1

Ich versuche, einen Bereich auf der X-Achse mit mehr als einer Farbe zu markieren. Ich habe es geschafft, eine Lösung zu finden, indem die Region entlang der x-Achse sectioning, wie in dieser Figur gezeigt: enter image description herePyplot axvspan: Mehrere Farben in einem Bereich (vertikal)

Aber ich möchte eine Lösung, wo die Schnitte auf der y-Achse statt geschieht. Nehmen Sie 6362 in der Handlung als Beispiel. Gibt es eine Möglichkeit, etwas wie einen gestrichelten Balken zu kreieren, wo jeder andere Bindestrich (oder wie auch immer er genannt wird) lila und rot ist?

bearbeiten Hier ist der entsprechende Code für jeden Unterabschnitt horizontal markieren

# 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

Sie werden bauen, dass Patches verwenden Ich denke: http://matplotlib.org/examples/shapes_and_collections/artist_reference.html, ohne den Code zu sehen und Daten ist es schwer zu sagen. – armatita

+0

@armatita Alles klar, ich werde in Patches schauen, danke. Ich habe den Code für die aktuelle Hervorhebung hinzugefügt, wenn Sie einen Blick darauf werfen möchten. – Plasma

Antwort

2

Sie können dies die ymin und ymax Optionen axvspan tun mit jedem „Strich“ zu erstellen. Durch Schleifen des Achsenintervalls 0-1 können Sie alle Striche aufbauen.

Hier ist eine schnelle Funktion, die ich zusammengestellt habe, um es etwas automatisierter zu machen. Rufen Sie vspandash mit Ihren erforderlichen Optionen auf, um die Region mit Bindestrichen zu füllen.

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

Verwandte Themen