如何在matplotlib 3D绘图中设置X轴为对数刻度?
解决Matplotlib 3D散点图X轴对数刻度异常问题
原因说明
Matplotlib旧版本对3D坐标轴的对数刻度渲染支持不完善,直接调用ax.set_xscale("log")会导致显示异常。
解决方案
方案1:升级Matplotlib到新版本
Matplotlib 3.4及以上版本修复了3D对数轴的显示问题,升级后可直接使用原有代码:
pip install --upgrade matplotlib
升级后取消#ax.set_xscale("log")的注释即可正常显示。
方案2:手动模拟对数刻度(兼容旧版本)
如果无法升级,可通过对数据取对数后手动设置刻度标签来实现效果:
import matplotlib.pyplot as plt import numpy as np fig = plt.figure(figsize=(10, 15)) ax = plt.axes(projection='3d') # 确保面积数据无0值,避免对数计算报错 dataset_chosen = dataset_chosen[dataset_chosen["LotArea"] > 0] area_data = dataset_chosen["LotArea"] # 对面积数据取10为底的对数 log_area = np.log10(area_data) price_data = dataset_chosen["SalePrice"] year_data = dataset_chosen["YrSold"] cmhot = plt.get_cmap("hot") # 使用对数转换后的数据绘制散点图 ax.scatter3D(xs=log_area, ys=price_data, zs=year_data, c=dataset_chosen["PoolArea"]) # 设置X轴刻度与对应原始数值标签 log_ticks = [3, 4, 5] # 对应原始数据1000、10000、100000 ax.set_xticks(log_ticks) ax.set_xticklabels(["1000", "10000", "100000"]) ax.set_xlabel("Area (log scale)") ax.set_ylabel("Price") ax.set_zlabel("Year") plt.show()
内容的提问来源于stack exchange,提问作者Георгий Гуминов
相关产品推荐
相关产品推荐

