在 Colab 上使用 Altair 钳位每日温度图

问题描述 投票:0回答:1

我正在尝试使用 Altair 从 Climate Reanalyzer 重新创建世界温度图:https://climatereanalyzer.org/clim/t2_daily/?dm_id=world。数据很容易加载:

import pandas as pd
import altair as alt
import json

url = "https://climatereanalyzer.org/clim/t2_daily/json/era5_world_t2_day.json"
data = requests.get(url).json()

years = []
all_temperatures = []
for year_data in data:
    year = year_data['name']
    temperatures = year_data['data']
    temperatures = [temp if temp is not None else float('nan') for temp in temperatures]
    days = list(range(1, len(temperatures) + 1))
    
    df = pd.DataFrame({
        'Year': [year] * len(temperatures),
        'Day': days,
        'Temperature': temperatures
    })
    
    years.append(year)
    all_temperatures.append(df)

df_all = pd.concat(all_temperatures)

图表有几个明显的问题,但我最好奇的部分是365天的错误夹紧:

alt.data_transformers.enable('default', max_rows=None)
chart = alt.Chart(df_all).mark_line().encode(
    x=alt.X(
        'Day:Q', 
        title='Day of the Year', 
        scale=alt.Scale(domain=(0, 365), clamp=True)),
    y=alt.Y(
        'Temperature:Q', 
        title='Temperature (°C)', 
        scale=alt.Scale(domain=(11, 18), clamp=True)),
).properties(
    title='Daily World Temperatures',
    width=600,
    height=600
).encode(
    color=alt.Color(
        'Year:N', 
        legend=alt.Legend(
            orient='bottom', 
            columns=10, 
            symbolLimit=100
        )
    ),
)

chart

enter image description here

python google-colaboratory altair clamp
1个回答
0
投票

经过一番挖掘,我发现了 vegafusion。 以下代码解决了这个问题:

!conda install -c conda-forge vegafusion vegafusion-python-embed vl-convert-python
import altair as alt
alt.data_transformers.enable("vegafusion")
© www.soinside.com 2019 - 2024. All rights reserved.