TypeError: histogram() got an unexpected keyword argument 'new'问题

本文解决了使用Seaborn模块进行数据可视化时遇到的TypeError问题,原因是Matplotlib版本过低。通过卸载并重新安装Matplotlib成功解决了问题。

今晚在用seaborn模块进行可视化时,出现了“TypeError: histogram() got an unexpected keyword argument 'new'”的问题,查了一些资料,是matplotlib版本过低的原因。

pip uninstall matplolib

pip install matplotlib

成功解决。

自己用的Python2.7一直是《利用Python进行数据分析》书本上推荐的EDPFree,现在愈发的感觉里面有很多的模块需要更新。

我的gtda版本为0.6.2,然后豆包给我的一个实验代码是:报错为TypeError: Projection.__init__() got an unexpected keyword argument 'func'import numpy as np import matplotlib.pyplot as plt from sklearn.cluster import DBSCAN from sklearn.decomposition import PCA from sklearn.datasets import make_circles, make_swiss_roll from gtda.mapper import ( Projection, CubicalCover, make_mapper_pipeline, plot_static_mapper_graph, plot_interactive_mapper_graph ) import networkx as nx # 确保中文显示正常 plt.rcParams["font.family"] = ["SimHei", "WenQuanYi Micro Hei", "Heiti TC"] class MapperWithGiotto: def __init__(self, filter_func, n_intervals=10, overlap_frac=0.3, clusterer=DBSCAN(eps=0.3, min_samples=5)): """ 基于giotto-tda 0.6.2的Mapper算法实现 参数: filter_func: 透镜函数(输入高维数据X,输出低维投影F) n_intervals: 区间数量 overlap_frac: 区间重叠比例(0-1) clusterer: 聚类器(默认DBSCAN) """ self.filter_func = filter_func self.n_intervals = n_intervals self.overlap_frac = overlap_frac self.clusterer = clusterer self.pipeline = self._build_pipeline() # 构建流水线 self.graph = None # 存储拓扑图 self.X = None # 存储输入数据 def _build_pipeline(self): """构建Mapper流水线(适配0.6.2版本)""" # 1. 透镜函数(Projection类在0.6.2中用func参数指定投影函数) projection = Projection(func=self.filter_func) # 2. 区间覆盖(立方覆盖) cover = CubicalCover(n_intervals=self.n_intervals, overlap_frac=self.overlap_frac) # 3. 构建完整流水线 pipeline = make_mapper_pipeline( projection=projection, cover=cover, clusterer=self.clusterer, verbose=False # 关闭详细输出 ) return pipeline def fit(self, X): """拟合数据并生成拓扑图""" self.X = X self.graph = self.pipeline.fit_transform(X) return self.graph def plot_static(self, title="Mapper静态可视化"): """静态可视化(基于matplotlib)""" if self.graph is None or self.X is None: raise ValueError("请先调用fit()方法拟合数据") fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 6)) # 原始数据可视化(2D) if self.X.shape[1] > 2: X_vis = PCA(n_components=2).fit_transform(self.X) else: X_vis = self.X ax1.scatter(X_vis[:, 0], X_vis[:, 1], c="steelblue", s=20, alpha=0.7) ax1.set_title("原始数据(2D可视化)") ax1.set_xlabel("维度1") ax1.set_ylabel("维度2") # Mapper拓扑图(静态) plot_static_mapper_graph( self.graph, ax=ax2, # 指定子图轴 layout="spring", node_size=30, node_color="coral", edge_color="gray", title="Mapper拓扑图" ) plt.suptitle(title, fontsize=14) plt.tight_layout(rect=[0, 0, 1, 0.96]) # 预留suptitle空间 plt.show() def plot_interactive(self, title="Mapper交互式可视化"): """交互式可视化(基于plotly,0.6.2版本兼容)""" if self.graph is None or self.X is None: raise ValueError("请先调用fit()方法拟合数据") # 生成交互式图 fig = plot_interactive_mapper_graph( self.graph, X=self.X, layout="spring", node_size=30, node_color="coral", edge_color="gray", title=title ) fig.show() # 定义常用透镜函数(适配0.6.2版本的输入输出要求) def lens_pca_1d(X): """PCA第一主成分作为1D透镜""" return PCA(n_components=1).fit_transform(X) def lens_feature_0(X): """使用数据的第0个特征作为透镜""" return X[:, [0]] # 保持二维结构(n_samples, 1) def lens_mean(X): """样本各特征的均值作为透镜""" return np.mean(X, axis=1).reshape(-1, 1) # 确保输出为(n_samples, 1) # 测试代码(使用环形数据验证) if __name__ == "__main__": # 生成带噪声的环形数据(典型拓扑结构:含孔洞) X, y = make_circles(n_samples=800, noise=0.12, factor=0.4, random_state=42) # 初始化Mapper算法(使用PCA透镜) mapper = MapperWithGiotto( filter_func=lens_pca_1d, # 透镜函数 n_intervals=12, # 区间数量 overlap_frac=0.35, # 重叠比例 clusterer=DBSCAN(eps=0.25, min_samples=6) # 聚类参数 ) # 拟合数据 mapper.fit(X) # 静态可视化(必选,matplotlib基础支持) mapper.plot_static(title="环形数据的Mapper分析(giotto-tda 0.6.2)") # 交互式可视化(可选,需plotly支持,若报错可注释) # mapper.plot_interactive(title="环形数据的交互式Mapper分析")
最新发布
10-31
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值