首页 > 解决方案 > Matplotlib 中的散点图矩阵:“奇异矩阵”错误

问题描述

我有以下 .csv 数据:

Simulation Run,[urea] (μM),[NO3-] (μM),[NH4+] (μM),[NO2-] (μM),[O2] (μM),[HCO3-] (μM),[OH-] (μM),[H+] (μM),[H2O] (μM)
/Run_01,1124.3139186264032,49.79709670397852,128.31458304321205,0.0,4.0,140000.0,0.1,0.1,55000000.0
/Run_02,1.0017668367460492e-159,2426.7395169966485,3.1544859186304598e-09,1.975005700484566e-10,4.0,140000.0,0.1,0.1,55000000.0
/Run_03,9.905001536507822e-160,2426.739516996945,2.861369463189477e-09,1.7910618538551373e-10,4.0,140000.0,0.1,0.1,55000000.0
/Run_04,1123.3362048916795,49.7956932352008,130.27141398143655,0.0,4.0,140000.0,0.1,0.1,55000000.0
/Run_05,1101.9594005273052,49.792379912298884,173.02833603309404,0.0,4.0,140000.0,0.1,0.1,55000000.0

我想将它绘制在一系列散点图矩阵中,以查看不同变量之间的关系。很像这里的做法。注意:在链接的示例中,该人询问如何在 altair 中完成此操作。我想在 Matplotlib 中执行此操作。

散点图矩阵

使用上面的代码作为参考,这是我正在使用的代码:

import pandas as pd
from pandas.plotting import scatter_matrix

import matplotlib.pyplot as plt
from matplotlib.backends.backend_pdf import PdfPages

from math import ceil

    def graph_data(f: str):
        """
        Represents the data
        as a series of scatter-plot matrices.
        """
    
        df = pd.read_csv(f)

        NROWS = ceil((len(df.columns) - 1) / 3)
        # Although the number of variables could vary,
        # I would like no more than 3 charts per row.
        NCOLS = 3
    
        fname = f[:-4] + '.pdf'
    
        with PdfPages(fname) as pdf:
            scatter_matrix(df, alpha=0.2, figsize=(NROWS, NCOLS), diagonal='kde')
            pdf.savefig(bbox_inches='tight')
            plt.close()

当我尝试运行它时,这是我得到的错误:

[LOTS OF TRACEBACK]...numpy.linalg.LinAlgError: singular matrix

这是因为变量的数量不是完美的平方数(因此不会产生方阵)吗?有没有办法避免这种情况?

编辑:

我忘了指定我的导入语句,所以我现在有这些。

标签: pythonnumpymatplotlib

解决方案


推荐阅读