用R或Python表示优势比和p值的好方法

用R或Python表示优势比和p值的好方法,python,r,seaborn,Python,R,Seaborn,假设我有n个二进制变量,我想将它们与n^2/2-n卡方检验进行比较。因此,我可以得到每个交互作用的优势比(OR)和p值。这些可以显示为两个单独的nxn矩阵(一个用于OR,一个用于p值),但我想在一个信息图上显示它们 类似的想法是R中的A,但大小与OR相当,p值与颜色相当 在R或Python中是否有任何已知的包可以绘制类似的内容? 我尝试了python中的seaborn: import seaborn as sns import numpy as np import pandas as pd im

假设我有n个二进制变量,我想将它们与n^2/2-n卡方检验进行比较。因此,我可以得到每个交互作用的优势比(OR)和p值。这些可以显示为两个单独的nxn矩阵(一个用于OR,一个用于p值),但我想在一个信息图上显示它们

类似的想法是R中的A,但大小与OR相当,p值与颜色相当

在R或Python中是否有任何已知的包可以绘制类似的内容? 我尝试了python中的seaborn:

import seaborn as sns
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

p = -np.log10(np.random.random((3,5)))
odds = (2*np.random.random((3,5))-1)

future_df = []
for i in range(p.shape[0]):
    for j in range(p.shape[1]):
        future_df.append([j+0.5,i+0.5,p[i,j],odds[i,j]])
df = pd.DataFrame(future_df, columns=["x","y","-log10(p)","OR"])

# Plotting
sns.set_style("whitegrid")
ax = sns.relplot(x="x", y="y", hue="-log10(p)", size="OR", data=df, 
                 palette="Reds", sizes=(0,10000), height=10, aspect=(odds.shape[1]/odds.shape[0])*1.5)
ax.ax.set(xlim=(0,odds.shape[1]))
ax.ax.set(ylim=(0,odds.shape[0]))
ax.ax.set(yticks=range(0,odds.shape[0]))

norm = plt.Normalize(0, 3)
sm = plt.cm.ScalarMappable(cmap="Reds", norm=norm)
sm.set_array([])

# Modify old legend
handles, labels = ax.ax.get_legend_handles_labels()
ax.ax.figure.colorbar(sm)
这开始实现我的意图,但我有两个问题: 1) 如何编辑旧图例以展开值使其可见? 2) 有没有办法显式控制圆的大小,这样我就不必手动调整?我需要圆的直径达到1个单位


您可以尝试使用python中的一些图形库,我建议您使用python中名为seaborn的散点图库:
如果您有任何问题,请随时向我询问seaborn

谢谢!我试过了,我用seaborn Qs编辑了我的原始问题:)