用datascience的方法和matplotlib重新绘制seaborn里边的图,发现输出的图有一些问题,应该怎么调整??

需要绘制的是三种天气下的能耗PDF曲线,第一种是用seaborn的方法,第二种是尝试用datascience以及matplotlib来绘制同样的曲线,首先为什么起点是不一致的,我要怎么解决,其次我是不是在计算kde的时候有什么问题?曲线的相互关系和形状都不太一样了。

第一种:seaborn


sns.displot(data, x="Power", hue="Weather", kind="kde")
plt.xlabel('Daily PV generation [kW]', fontsize=14)
plt.ylabel('PDF', fontsize=14)

img

第二种:datascience+matplotlib


#将每种天气对应的数据提取出来
data1_sunny=data1.where("Weather",'Sunny').sort('Power')
data1_rainy=data1.where('Weather','Rainy').sort('Power')
data1_cloudy=data1.where("Weather",'Cloudy').sort('Power')
#引入scipy(计算PDF用),这个matplotlib为啥一定要输这个命令?不然就报错
import scipy.stats as st
%matplotlib inline
#分别计算每种天气对应的PDF,并赋值给对应x,y
PS=data1_sunny.column('Power')
PR=data1_rainy.column('Power')
PC=data1_cloudy.column('Power')
PDF1=st.gaussian_kde(PS) 
PDF2=st.gaussian_kde(PR)
PDF3=st.gaussian_kde(PC)
x1=PS
x2=PR
x3=PC
y1=PDF1
y2=PDF2
y3=PDF3
#绘图啦!
plt.plot(x1,PDF1.pdf(x1),label='Sunny',color='orange')
plt.plot(x2,PDF2.pdf(x2),label='Rainy',color='deepskyblue')
plt.plot(x3,PDF3.pdf(x3),label='Cloudy',color='green')
plt.axis('tight')
plt.legend(loc='upper right')
plt.title("PV curve")
plt.xlabel('Daily PV generation [kW]')
plt.ylabel('PDF')
plt.show()

img

该回答引用ChatGPT

起点不一致的问题可能是由于两种方法使用的KDE函数不同导致的。seaborn使用的是SciPy库中的默认高斯KDE函数,而datascience+matplotlib使用的是SciPy库中的gaussian_kde函数。

要使这两种方法的起点一致,可以尝试在datascience+matplotlib中使用SciPy库中的默认高斯KDE函数。可以使用scipy.stats.gaussian_kde函数,但是需要手动设置带宽参数(bandwidth),否则可能会导致曲线形状不一致。

除了起点不一致,两种方法的KDE曲线的形状和相互关系不一致,这可能是因为两种方法计算KDE时使用的带宽参数不同导致的。在seaborn中,带宽参数可以通过bw_adjust参数进行调整,而在datascience+matplotlib中,可以通过手动设置带宽参数来进行调整。

可以尝试在两种方法中使用相同的带宽参数,并且调整带宽参数来控制KDE曲线的形状。可以通过试错的方式来找到最适合的带宽参数。