如何在一个轴上绘制间隔

时间:2017-11-21 14:21:13

标签: python matplotlib

我是python的新手,我试图以间隔的形式在一个轴X上绘制一些情侣(x,y)。例如,如果我有以下夫妻(2,3),(2,4),(4,4),(1,3),我应该在下图中生成图表。

我尝试了这段代码,但它没有给我正确的结果

def DrawGraph (RM):
    for i in range(0,RM.shape[0]-1):
        c1=lastOne2(RM,i)
        ax1=plt.subplot(1,1,1)
        if c1[0] == c1[1]:
            plt.plot(c1[0],c1[1],'ro')
        if c1[0] < c1[1]:
            ax1.barh(c1[0], c1[1], height=0.05)
        if c1[0] > c1[1]:
            ax1.barh(c1[1], c1[0], height=0.05)
    return plt

desired output

2 个答案:

答案 0 :(得分:0)

因此我不确定您使用barh的原因。我认为使用法线并创建一些y值更简单。除此之外,这应该得到你想要的。请注意,您可以通过plt.plot指定kwargs的任何关键字参数。此外,deltaY可以调整水平线分开的距离。

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

def DrawGraph(RM,deltaY=1,**kwargs):

    # Create figure
    ax=plt.subplot(1,1,1)

    for i in range(0,RM.shape[0]):

        # Grab current interval
        c1=RM[i]

        # Create y-values and shift intervals up by (i+1)*deltaY
        y=(i+1)*deltaY*np.ones((2,1))

        # Draw
        if c1[0] == c1[1]:
            ax.plot([c1[0]],[i*deltaY],'o',**kwargs)
        if c1[0] < c1[1]:
            ax.plot(c1,y,**kwargs)
        if c1[0] > c1[1]:
            ax.plot(c1,y,lw=lw,**kwargs)

    # Set ylim so it looks nice
    ax.set_ylim([0,deltaY*(i+2)])   

    return ax

# Define intervals
intervals=np.array([(2,3),(2,4),(4,4),(1,3)])


# Plot
DrawGraph(intervals,lw=5,c='b')

# Draw
plt.show()

这会让你

enter image description here

答案 1 :(得分:0)

一个简单的循环就足够了。

=IFNA(INDEX($A$1:$A$30,IF(SUMPRODUCT(ISNUMBER(SEARCH($A$1:$A$3,B1))*ROW($1:$30))=0,#N/A,SUMPRODUCT(ISNUMBER(SEARCH($A$1:$A$30,B1))*ROW($1:$30)))),"")

enter image description here