Matplotlib坐标轴科学计数法设置(基于IMDB Kaggle数据集)
基于IMDB Kaggle数据集的气泡图实现(含坐标轴科学计数法配置)
我帮你把完整的代码流程整理好,包括异常值筛选、气泡图绘制和科学计数法的设置,直接就能跑起来:
1. 完整代码实现
import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns # 读取IMDB Kaggle数据集(这里假设你已将数据存为csv,路径自行调整) df = pd.read_csv('tmdb_5000_movies.csv') # 筛选异常值:去掉budget_adj和revenue_adj过小的行(阈值设为100000,可按需调整) filtered_df = df[(df['budget_adj'] > 100000) & (df['revenue_adj'] > 100000)].copy() # 设置画布尺寸 plt.figure(figsize=(12, 8)) # 绘制气泡图:x为调整后预算,y为调整后收入,气泡大小映射热度 scatter = plt.scatter( x=filtered_df['budget_adj'], y=filtered_df['revenue_adj'], s=filtered_df['popularity'] * 50, # 乘以50让气泡大小更美观,可自行调整系数 alpha=0.6, # 设透明度避免气泡重叠遮挡 c='steelblue', edgecolors='white' ) # 设置坐标轴科学计数法:两种方式二选一即可 # 方式1:快捷全局设置 plt.ticklabel_format(style='sci', axis='both', scilimits=(0,0)) # 方式2:精细控制(如需指定小数位数),需导入额外模块 # from matplotlib.ticker import ScalarFormatter # ax = plt.gca() # ax.xaxis.set_major_formatter(ScalarFormatter(useMathText=True)) # ax.yaxis.set_major_formatter(ScalarFormatter(useMathText=True)) # ax.ticklabel_format(style='sci', axis='both', scilimits=(0,0)) # 添加图表标签与标题 plt.xlabel('Adjusted Budget (USD)', fontsize=12) plt.ylabel('Adjusted Revenue (USD)', fontsize=12) plt.title('Movie Budget vs Revenue (Bubble Size = Popularity)', fontsize=14, pad=20) # 添加热度对应的气泡大小图例(可选,提升可读性) handles, labels = scatter.legend_elements(prop="sizes", alpha=0.6) legend = plt.legend(handles, labels, loc="upper left", title="Popularity") # 显示网格(可选,优化视觉体验) plt.grid(alpha=0.3, linestyle='--') plt.show()
2. 关键细节说明
- 异常值筛选:我设置100000作为阈值,你也可以根据数据分布调整——比如用分位数(
df['budget_adj'].quantile(0.1))取前10%的最小值作为筛选标准,更贴合数据实际情况。 - 气泡大小调整:
popularity数值范围通常较小,乘以50是为了让气泡在图上显示得更明显,你可以根据实际渲染效果增减这个系数。 - 科学计数法设置:
plt.ticklabel_format()是最快捷的实现方式,scilimits=(0,0)表示所有数值都用科学计数法展示;如果需要更精细的格式控制(比如指定小数位数),可以选择第二种ScalarFormatter的方式。 - 透明度设置:
alpha=0.6能有效避免大量气泡重叠导致的视觉混乱,让图面信息更清晰。
内容的提问来源于stack exchange,提问作者user9026
相关产品推荐
相关产品推荐

