You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python实现图表重叠?全球气温数据集可视化新手求助

解决方案与可视化建议

一、整合三个图表展示

你当前使用Altair进行可视化,可通过alt.vconcat()(垂直拼接)或alt.hconcat()(水平拼接)将三个图表整合,同时建议先优化数据源拆分方式(避免依赖行索引的不稳定问题):

1. 稳健拆分数据源

替换原切片方式,通过Source列精准筛选:

# 更可靠的数据源拆分
gcag = Annual[Annual['Source'] == 'GCAG']
gistemp = Annual[Annual['Source'] == 'GISTEMP']

2. 定义三个图表并整合

先分别创建三个图表,再通过拼接组合,同时共享Y轴方便对比:

import altair as alt

# 1. 全部数据折线图(添加颜色区分数据源)
chart_all = alt.Chart(Annual, title="Annual Temperature Change (All Sources)").mark_line().encode(
    alt.X('Year:O', title='Year'),
    alt.Y('Mean', title='Temperature Anomaly (°C)'),
    color='Source:N'  # 用颜色区分两个数据源
)

# 2. GCAG数据源折线图
chart_gcag = alt.Chart(gcag, title="Annual Temperature Change (GCAG)").mark_line(color='#1f77b4').encode(
    alt.X('Year:O', title='Year'),
    alt.Y('Mean', title='Temperature Anomaly (°C)')
)

# 3. GISTEMP数据源折线图
chart_gistemp = alt.Chart(gistemp, title="Annual Temperature Change (GISTEMP)").mark_line(color='#ff7f0e').encode(
    alt.X('Year:O', title='Year'),
    alt.Y('Mean', title='Temperature Anomaly (°C)')
)

# 垂直拼接三个图表,共享Y轴
combined_chart = alt.vconcat(chart_all, chart_gcag, chart_gistemp).resolve_scale(y='shared')

# 展示整合后的图表
combined_chart.show()

如果屏幕宽度足够,也可以用alt.hconcat()实现水平排列,同样添加resolve_scale(y='shared')保证Y轴一致。


二、新手可视化建议(含其他图表类型)

1. 优化现有折线图的小技巧

  • 添加数据点:同时使用mark_line()和mark_point(),让每年的具体数值更清晰:
    chart_all = alt.Chart(Annual).mark_line() + alt.Chart(Annual).mark_point(size=30).encode(
        x='Year:O',
        y='Mean',
        color='Source:N',
        tooltip=['Year', 'Source', 'Mean']  # 添加鼠标悬停提示
    )
    
  • 添加趋势线:通过回归分析展示整体升温趋势,增强图表说服力:
    trend_line = chart_all.transform_regression('Year', 'Mean').mark_line(color='red', strokeDash=[5,5])
    chart_all_with_trend = chart_all + trend_line
    
  • 规范标签:始终给坐标轴添加明确的单位(比如温度异常值的单位是℃),让读者快速理解数据含义。

2. 其他适合的图表类型

(1)重叠面积图

用半透明面积展示两个数据源的温度变化范围,视觉上更直观:

alt.Chart(Annual, title='Temperature Anomaly (Area View)').mark_area(opacity=0.6).encode(
    x='Year:O',
    y='Mean',
    color='Source:N',
    tooltip=['Year', 'Source', 'Mean']
)

(2)差值折线图

计算两个数据源的温度差值,展示二者的差异变化趋势,突出数据一致性或分歧:

# 合并两个数据源的年份数据
merged_data = gcag.merge(gistemp, on='Year', suffixes=('_gcag', '_gistemp'))
merged_data['Mean_Diff'] = merged_data['Mean_gcag'] - merged_data['Mean_gistemp']

alt.Chart(merged_data, title='Temperature Difference (GCAG - GISTEMP)').mark_line(color='#9467bd').encode(
    x='Year:O',
    y='Mean_Diff',
    tooltip=['Year', 'Mean_Diff']
)

(3)分面折线图

按数据源分面展示,在同一布局下对比两个数据集的趋势:

alt.Chart(Annual, title='Temperature Change by Source').mark_line().encode(
    x='Year:O',
    y='Mean',
    color='Source:N'
).facet(column='Source:N')  # 按数据源分列展示

(4)箱线图(按年代分组)

如果想观察不同年代的温度分布情况,可按十年分组后用箱线图展示:

# 添加年代列
Annual['Decade'] = (Annual['Year'] // 10) * 10

alt.Chart(Annual, title='Temperature Anomaly Distribution by Decade').mark_boxplot().encode(
    x='Decade:O',
    y='Mean',
    color='Source:N'
)

3. 通用新手注意事项

  • 交互性:利用Altair的tooltip、selection_interval(框选放大)等功能,提升图表的实用性
  • 配色:选择色盲友好的配色方案(比如避免红绿色组合),确保所有读者都能清晰区分数据
  • 数据校验:用Annual.isnull().sum()检查是否有缺失值,提前处理异常数据

内容的提问来源于stack exchange,提问作者Schmarti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 18:14:58