如何用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
相关产品推荐
相关产品推荐

