【发布时间】:2021-07-30 10:20:43
【问题描述】:
我可以创建一个密度等高线图
from astropy.table import Table, join
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
from scipy import stats
# CLEAN Data
RErange = Table.read('../../GAMA_Data/REMassEClassEmeasure.fits')
RErange = RErange[RErange['SurfaceDensityFlag'] == 0]
#RErange = RErange[RErange['SurfaceDensity'] < 50]
RErange = RErange[RErange['AGEDenParFlag'] == 0]
RErange = RErange[RErange['CountInCylFlag'] == 0]
RErange = RErange[RErange['uminusr']> 0.001]
print(RErange.colnames)
yfield = 'uminusr'
xfield ='logmstar'
# set seaborn style
#sns.set_style("white")
df = RErange.to_pandas()
sns.displot(df, x='logmstar', y='uminusr', kind="kde")
plt.show()
但是如何根据子图创建多个(一行 3 个)? 因为 seaborn displot 似乎没有轴设施。
解决方案不一定要用seaborn。
【问题讨论】:
-
您可以改用底层轴级函数
sns.kdeplot(..., ax=...)。 -
已经尝试过 sns.kdeplot 但得到一个错误 ValueError: Big-endian buffer not supported on little-endian compiler 因此求助于 displot
-
此类错误可能与 numpy 安装(或 scipy 或 astropy)有关。您使用的哪个 seaborn 函数不会真正改变这一点。
-
天文学完全是关于天文学和表格的,它读取总是“大端”的 FITS 数据。 seaborn displot 在数据框中可以正常工作的事实。我确定当我最初遇到问题时,我用谷歌搜索并建议使用 displot。所以 kdeplot 只适用于小数据?我尝试通过数据框传递它,即 sns.kdeplot(df,x='logmstar', y='uminusr', ax = ax1, cmap='Blues') 但它不喜欢它
-
好吧,
kdeplot和displot使用相同的内部 100% python 代码。该错误来自其他库之一。请注意,写 "it didn't like it" 并不提供信息,也无助于找到解决方案。另外,请注意 seaborn 建议明确命名第一个参数,如sns.kdeplot(data=df, ...)。如果您真的想使用displot,您可以将数据框转换为长格式并使用其col=参数。您的问题没有包含足够的信息,无法准确了解您需要什么。
标签: python matplotlib seaborn