Plotting single points on a graph

前端 未结 1 1048
有刺的猬
有刺的猬 2021-02-14 03:08

I have a violin plot which looks like this:

\"enter

I want to plot a few individua

1条回答
  •  既然无缘
    2021-02-14 03:45

    Just plot the extra data right after the other plot:

    from matplotlib.pyplot import figure, show
    from scipy.stats import gaussian_kde
    from numpy.random import normal
    from numpy import arange
    
    def violin_plot(ax, data, pos, bp=False):
        '''
        create violin plots on an axis
        '''
        dist = max(pos)-min(pos)
        w = min(0.15*max(dist,1.0),0.5)
        for d,p in zip(data,pos):
            k = gaussian_kde(d) #calculates the kernel density
            m = k.dataset.min() #lower bound of violin
            M = k.dataset.max() #upper bound of violin
            x = arange(m,M,(M-m)/100.) # support for violin
            v = k.evaluate(x) #violin profile (density curve)
            v = v/v.max()*w #scaling the violin to the available space
            ax.fill_betweenx(x,p,v+p,facecolor='y',alpha=0.3)
            ax.fill_betweenx(x,p,-v+p,facecolor='y',alpha=0.3)
        if bp:
            ax.boxplot(data,notch=1,positions=pos,vert=1)
    
    if __name__=="__main__":
        pos = range(5)
        data = [normal(size=100) for i in pos]
        fig=figure()
        ax = fig.add_subplot(111)
        violin_plot(ax,data,pos,bp=1)
    
        data_x = [0, 1, 2, 2, 3, 4]
        data_y = [1.5, 1., 0.7, 2.5, 1, 1.5]
        ax.plot(data_x, data_y, 'or')
        fig.savefig("violins.gif")
    

    which gives

    augmented picture

    0 讨论(0)
提交回复
热议问题