【问题标题】:Creating a contour-enhanced funnel plot in Python在 Python 中创建等高线增强的漏斗图
【发布时间】:2021-03-23 12:55:27
【问题描述】:

我想创建一个 Contour-Enhanced 漏斗图(不是漏斗图),以测试 meta 分析中的小型研究效果,如下所示:

上面的情节是在 R 中创建的,它有几个包可以做到这一点。但是,我想使用 matplotlib 和 pandas 在 Python 中创建它。我怎样才能做到这一点? 我已经尝试过 Pythonmeta 包并得到了这个漏斗图

这是包的源代码:

    def __init__(self,size=[6,6],dpi=80): #set figure
        self.size=size #inchs
        self.dpi=dpi   #default:80pts
        self.title="Meta-analysis Results "  
        self.nototal=False
        plt.rcParams['font.sans-serif']=['SimHei'] 
        plt.rcParams['axes.unicode_minus']=False
        logger.info("Load Fig().")
    def funnel (self,effs):
        myfig = Fig_Funnel (self.size,self.dpi,effs)
        return myfig```
    def Fig_Funnel (size,dpi,effs):
        myfig = plt.figure(linewidth=1,figsize=size,dpi=dpi)
        myfig.set_size_inches(size)
        x=[];y=[]
        for i in range(1,len(effs)):
            x.append(effs[i][1])
            y.append(effs[i][6])
        lbl,=plt.plot(x,y,"o", lw=1)

    
        ymax=max(y)+0.2
        plt.ylim(ymax,0)
        plt.plot([effs[0][1],effs[0][1]],[0,ymax],color="blue", linestyle="--",
        lw=1)
        plt.plot([effs[0][1],effs[0][1]-1.96*ymax],[0,ymax],color="blue",
        linestyle="--", lw=1)
        plt.plot([effs[0][1],effs[0][1]+1.96*ymax],[0,ymax],color="blue",
        linestyle="--", lw=1)
        ax = gca()
        ax.spines['right'].set_color('none')
        ax.spines['top'].set_color('none')
        ax.xaxis.set_ticks_position('bottom')
        ax.yaxis.set_ticks_position('left')

        plt.xlabel("Effect Size")
        plt.ylabel("Standard Error")
        myfig.tight_layout() 
        return myfig

【问题讨论】:

  • 嗨 Safoora,请告诉我们您到目前为止所做的尝试以及源图是如何创建的,例如向我们展示代码和数据。人们很乐意提供帮助,但不想做你的工作
  • 感谢您的评论。我不希望任何人做我的工作。我搜索了很多包以在 Python 中创建漏斗图但没有任何包。我只是想要一些身体给我一个线索并告诉我是否可能。我已经尝试了 Pymeta 包进行元分析,它产生了一个简单的漏斗图,我试图更改源代码但无法更改它以给我一个轮廓增强漏斗图
  • @dube 我觉得我沟通不好
  • @dube 嗨。我应该添加更多详细信息吗?
  • 嘿萨福拉。对不起,这不是我的话题,我帮不了你。这样就更好了,谁知道呢

标签: python python-3.x matplotlib plot


【解决方案1】:

最后,我自己创造了它。:)

首先,要了解等高线增强漏斗图的概念,我建议阅读Jaime L Peters 论文。

为了创建情节,我使用了以下代码

def CEfunnelplot(rults):      #to draw contour enhanced funnel plot

fig=plt.figure(figsize=(9,8))
ax=gca()
x=logES(rults)
y=SE(rults)      

plt.xlim(min(x)-5,max(x)+2)  #the xlim can change manually
plt.ylim(max(y)+0.1,0)
ax.set_facecolor(color="whitesmoke")
tes=(rults[0][1])
logtes=math.log(rults[0][1])


plt.plot ([0,(-2.58*max(y))],[0,max(y)], linestyle="None", lw=1)
plt.plot ([0,(2.58*max(y))],[0,max(y)], linestyle="None", lw=1)

trianglex = [ -2.58*max(y), 0, 2.58*max(y)] 
triangley = [ max(y),0, max(y)] 
for i in range(3):
    plt.plot(trianglex, triangley,color="lightgray")
plt.fill(trianglex, triangley,"lightgray")

plt.plot ([0,(-1.96*max(y))],[0,max(y)], linestyle="None", lw=1)
plt.plot ([0,(1.96*max(y))],[0,max(y)], linestyle="None", lw=1)

trianglex = [ -1.96*max(y), 0,1.96*max(y)] 
triangley = [ max(y),0, max(y)] 
for i in range(3):
    plt.plot(trianglex, triangley,color="darkgrey")
plt.fill(trianglex, triangley,"darkgrey")


plt.plot ([0,(-1.65*max(y))],[0,max(y)], linestyle="None", lw=1)
plt.plot ([0,(1.65*max(y))],[0,max(y)], linestyle="None", lw=1)

trianglex = [ -1.65*max(y), 0,1.65*max(y)] 
triangley = [ max(y),0, max(y)] 
for i in range(3):
    plt.plot(trianglex, triangley,color="white")
plt.fill(trianglex, triangley,"white")

plt.plot ([logtes,logtes],[0,max(y)],color="blue", linestyle="--", lw=1)
plt.plot ([logtes,logtes-1.96*max(y)],[0,max(y)],color="blue", linestyle="--", lw=1)
plt.plot ([logtes,logtes+1.96*max(y)],[0,max(y)],color="blue", linestyle="--", lw=1)
plt.plot(x,y,"o",lw=1,color="k")

ax = gca()
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
colors = ['whitesmoke', 'lightgray', 'darkgrey',"white"]
lines =[Line2D([0], [0], color=c, linewidth=3, linestyle='solid') for c in colors]
labels = ["p < 1%","1%< p <5%","5%< p <10%","p > 10%"]
plt.legend(lines, labels,shadow=True)    

plt.xlabel("logRR",fontsize=14 )
plt.ylabel("Standard Error",fontsize=14,rotation=90 )
plt.savefig("Contour Enhanced Funnel plot.jpg")

我使用This sample code 创建图例并使用This code 为绘图着色。 结果如下:

如果您想将图例的标记更改为“方形”,您可以更改代码如下

lines =[Line2D([0], [0],color=c,linewidth=3,linestyle='None',marker="s") for c in colors]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-25
    • 2021-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多