我正在尝试使用 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
经过一番挖掘,我发现了 vegafusion。 以下代码解决了这个问题:
!conda install -c conda-forge vegafusion vegafusion-python-embed vl-convert-python
import altair as alt
alt.data_transformers.enable("vegafusion")