用置信区间绘制优势比 python

问题描述 投票:0回答:2

我试图用这种方式在Python中表示优势比:

ax = sns.scatterplot(data=df_result, x="odd_ratio", y="iso")
plt.axvline(1.0, color='black', linestyle='--')

enter image description here

但我希望每个比值比都有水平条来指示置信区间。 在我的数据框中

df_result
我有有关下限和上限的信息(
df_result['lower_conf]
df_result['upper_conf]
)。如何绘制置信区间?预先感谢。

python plot confidence-interval
2个回答
1
投票

我与您分享我的代码,它用于垂直绘图,但您可以更改轴。我有一个表格,其中 5%、95% 和 OR 值位于不同的列中

sns.set_style("whitegrid")
fig, ax = plt.subplots(figsize=(7, 5))
ax.set_yscale("log")
ax.axhline(1, ls='--', linewidth=1, color='black')

n = 0
for index, i in df.iterrows():
    x = [n,n]
    y = [i["5%"], i["95%"]]
    ax.plot(x, y, "_-", markersize = 15, markeredgewidth= 3, linewidth = 3, color=sns.color_palette("muted")[n])

    x = [n]
    y = [i["Odds Ratio"]]
    ax.plot(x, y, "o", color=sns.color_palette("muted")[n], markersize = 10)
    n += 1

ax.set_xlabel("")
ax.set_ylabel("Odds Ratio")
ax.set_xticklabels(["", "Resistant", "Focal Epilepsy", "> 3 seizures/month", "Polytherapy", "DDD > 1", "Adverse effects"], rotation=45)

结果


0
投票

由于我需要一个带有水平范围线的类似图来表示这样的一系列指标,因此这是一个工作版本,其轴从之前的答案翻转,现在是OP想要的一系列水平线:

seaborn
不是必需的;
matplotlib
就足够了)

我的示例数据框:

sample data with

plt.grid(False)
plt.box(False)

n = 0
for index, i in data.iterrows():
    x = [i["low"], i["high"]]
    y = [n,n]
    ax.plot(x, y, "|-", markersize = 15, markeredgewidth= 3, linewidth = 3) 
    
    # if you need a dot on each line, use this    
    x = [(i["high"] + i["low"])/2] # mid-point for demo-purposes
    y = [n]
    ax.plot(x, y, "o", markersize = 10)
    n += 1

ax.axvline(mean_score, ls='--', linewidth=1, color='black')
ax.yaxis.set_ticklabels(data.index)
ax.yaxis.set_ticks(range(len(data.index)))
plt.show()

您需要弄乱调色板,但这就是在

matplotlib
中制作此类图表的方法。 example of the plot generated by matplotlib

© www.soinside.com 2019 - 2024. All rights reserved.