Python 使用Seaborn绘制计算数据的联合图

Python 使用Seaborn绘制计算数据的联合图,python,numpy,matplotlib,seaborn,physics,Python,Numpy,Matplotlib,Seaborn,Physics,我想用以下数据创建一个2D关节图,根据我所读到的,Seaborn是最好的解决方案 我已经完成了所需的1_D线图,并试图通过将每个图的方程式放在各自的轴上,在Seaborn中创建关节图 我希望x轴上的绘图与我使用matplotlib创建的绘图相似,因此jointplot应该有一些穿过圆形区域的垂直线。 然而,seaborn在x轴上的绘图输出似乎平滑了许多所需的数据点,从而形成了平滑曲线 从阅读有关Seaborn的内容来看,它可能不符合我对此类数据的需求,我也尝试使用矩阵,但它似乎不适用于Seabo

我想用以下数据创建一个2D关节图,根据我所读到的,Seaborn是最好的解决方案

我已经完成了所需的1_D线图,并试图通过将每个图的方程式放在各自的轴上,在Seaborn中创建关节图

我希望x轴上的绘图与我使用matplotlib创建的绘图相似,因此jointplot应该有一些穿过圆形区域的垂直线。 然而,seaborn在x轴上的绘图输出似乎平滑了许多所需的数据点,从而形成了平滑曲线

从阅读有关Seaborn的内容来看,它可能不符合我对此类数据的需求,我也尝试使用矩阵,但它似乎不适用于Seaborn

这是我使用的代码

#imported as required

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

#Set limits for y values (x - axis)
ymin=-.6 
ymax= .6

#Set up an array of angle values between defined y values in mm
angle = np.linspace(np.deg2rad(ymin), np.deg2rad(ymax), 1000)

# Define known values
L = 480                        
a = 0.09
d = 0.4
lam = 670e-6

# Calculate values for position y, alpha and beta
y = np.tan(angle)*L
alpha = (np.pi*a/lam)*np.sin(angle)
beta = (np.pi*d/lam)*np.sin(angle)


I = ((np.sin(alpha)/alpha)**2)*((np.cos(beta))**2)

# Plot the graph of intensity versus displacement
plt.plot(y, I)

import seaborn as sns

p = ((np.sin(alpha)/alpha)**2)*((np.cos(beta))**2)    # Interference term and decaying term 
q = (np.sin(alpha)/alpha)**2                          # Decaying term            

sns.jointplot(x=p, y=q, kind='kde',marginal_kws=dict(bw=0.6),bw=0.8)
plt.show()
你可能知道这就是著名的双缝实验

编辑:为了解决这个问题,我使用JointGrid在轴上绘图,如下所示

g = sns.JointGrid(x=p, y=q)
g.plot_joint(sns.kdeplot)
g.plot_marginals(sns.kdeplot)


我不熟悉Seaborn语法,所以我只能用这个简单的代码片段来给出输出,这与我最初的尝试有相同的问题。

直接在轴上绘图<代码>jointplot返回JointGrid。您可以访问轴作为该对象的属性(请参见JointGrid文档中的第六个示例)嗨,Paul,我已经浏览了您链接的示例,并使用了JointGrid,如我编辑的问题中所述。我无法计算出语法并完成一个类似于您提到的第六个示例的示例,但我成功地完成了一个简单的方法。然而,我不确定这是否能解决我的问题,因为kde绘图似乎可以平滑处理我需要的数据。