【问题标题】:How can I create a series of density contours in a row ( i.e. subplots)如何连续创建一系列密度轮廓(即子图)
【发布时间】: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') 但它不喜欢它
  • 好吧,kdeplotdisplot 使用相同的内部 100% python 代码。该错误来自其他库之一。请注意,写 "it didn't like it" 并不提供信息,也无助于找到解决方案。另外,请注意 seaborn 建议明确命名第一个参数,如 sns.kdeplot(data=df, ...)。如果您真的想使用displot,您可以将数据框转换为长格式并使用其col= 参数。您的问题没有包含足够的信息,无法准确了解您需要什么。

标签: python matplotlib seaborn


【解决方案1】:

好的,通过使用解决 endness 的 Dataframe 解决

df = RErange.to_pandas()

fig = plt.figure(figsize=(12, 16), dpi=200)
ax1 = fig.add_subplot(1, 1, 1)
sns.kdeplot(df.logmstar, df.uminusr, ax=ax1, cmap='Blues')
plt.show()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-09
    • 1970-01-01
    • 1970-01-01
    • 2020-06-03
    • 1970-01-01
    • 2021-09-20
    相关资源
    最近更新 更多