如何基于离散时间仓自动绘制多组PC1-PC2散点图?
按时间仓自动生成PC1-PC2散点图解决方案
以下用Python结合pandas和matplotlib实现自动批量生成对应时间仓的散点图,适配你的数据格式:
步骤说明
- 将数据整理为可处理的DataFrame(Excel/CSV文件直接用
pd.read_excel/pd.read_csv加载) - 自动识别所有存在的时间仓范围
- 循环遍历每个时间仓,筛选出该时间点存在的物种(满足
APPEARANCE ≤ 时间仓 ≤ DISAPPEARANCE) - 批量绘制并保存/显示散点图
完整代码示例
import pandas as pd import matplotlib.pyplot as plt # 1. 加载数据(示例用你提供的数据,实际替换为你的文件路径) data = pd.DataFrame({ 'SPECIES': ['Alpha', 'Beta', 'Gamma', 'Delta', 'Epsilon'], 'GROUP': ['A', 'B', 'B', 'B', 'D'], 'APPEARANCE': [1, 1, 1, 2, 3], 'DISAPPEARANCE': [2, 2, 5, 3, 4], 'PC1': [-0.100119669, 0.217854357, 0.193998962, 0.126089613, -0.094182811], 'PC2': [0.0595756, -0.010260947, -0.029757206, 0.014409345, -0.004406088] }) # 2. 确定所有时间仓范围(从最小出现时间到最大消失时间) min_time = data['APPEARANCE'].min() max_time = data['DISAPPEARANCE'].max() time_bins = range(min_time, max_time + 1) # 3. 循环生成每个时间仓的散点图 for t in time_bins: # 筛选当前时间仓存在的物种 current_data = data[(data['APPEARANCE'] <= t) & (data['DISAPPEARANCE'] >= t)] # 创建画布 plt.figure(figsize=(8, 6)) # 按GROUP分组绘制散点,不同组用不同颜色 groups = current_data.groupby('GROUP') for name, group in groups: plt.scatter(group['PC1'], group['PC2'], label=name, alpha=0.7) # 设置图表属性 plt.title(f'Time Bin {t}: PC1 vs PC2') plt.xlabel('PC1') plt.ylabel('PC2') plt.legend(title='GROUP') plt.grid(alpha=0.3) # 保存图表(可替换为你的保存路径,比如'./time_bin_{t}.png') plt.savefig(f'time_bin_{t}.png', dpi=300, bbox_inches='tight') # 关闭画布释放内存 plt.close() print("所有时间仓图表已生成完成")
代码说明
- 数据加载部分:如果你的数据是CSV文件,把示例中的
pd.DataFrame替换为pd.read_csv('你的数据路径.csv')即可 - 时间仓筛选逻辑:通过布尔索引自动筛选出当前时间仓内存在的物种,无需手动划分数据集
- 分组绘图:按
GROUP字段区分不同物种组的颜色,方便组间对比 - 保存图表:自动以
time_bin_1.png、time_bin_2.png等命名保存,避免手动操作
如果需要调整图表样式(比如颜色、点大小),可以修改plt.scatter的参数(如s控制点大小,c指定颜色);如果偏好seaborn库,也可以把绘图部分替换为sns.scatterplot,核心逻辑保持一致。
内容的提问来源于stack exchange,提问作者Damiano
相关产品推荐
相关产品推荐

