从 Pandas 到 Polars 三十九:Polars 和 Matplotlib

Polars 与 matplotlib 配合得很好。

在matplotlib中,你可以直接使用polars的数据进行绘制图形,而无需把polars的dataframe转为pandas的dataframe:

import polars as pl
import matplotlib.pyplot as plt

# 创建一个polars DataFrame
df_pl = pl.DataFrame({
    "x": [1, 2, 3, 4, 5],
    "y": [2, 3, 5, 7, 11]
})

# 使用matplotlib绘图
plt.figure(figsize=(10, 6))

plt.plot(df_pl["x"], df_pl["y"], marker='o')
# 数据量大的时候,建议使用表达式API来引用列:
# plt.plot(df_pl.select(pl.col("x")), df_pl.select(pl.col("y")), marker='x')

plt.title("Example Plot")
plt.xlabel("x")
plt.ylabel("y")
plt.grid(True)
plt.show()

再例如,要制作条形图,我们直接将 Polars 数据框中的列传递给它。

在下面的第一个示例中,我们可以看到北大西洋中爱尔兰波浪浮标测得的最大波浪高度(这只是一个片段,用于向您展示它的工作方式)。

stationAggs = stationAggs.sort("significant_wave_height_max").tail(6)

fig, ax = plt.subplots()

ax.barh(
    y=stationAggs["stationID"],
    width=stationAggs["significant_wave_height_max"],
)
ax.set_xlabel('Max wave height (m)')

我们是否也可以进行一些风暴追踪呢?

在第二个示例中,我们使用快速的 groupby_dynamic 方法对每个站点的波浪高度取3小时的平均值。

为了绘制多线图,我们需要对每个线调用 ax.plot 方法。我们可以通过循环遍历一个分组对象来获取每个站点的数据,并在9月26日看到一场带有一些大块波浪的风暴。

# 每个站点的平均时间序列分为3小时窗口
averagedValuesDf = (
    dfBigWaves
    .groupby_dynamic("time","3h",by="stationID")
     .agg(
            pl.col("significant_wave_height").mean()
        )
)
fig,ax = plt.subplots(figsize=(12, 4), dpi=80)
# 遍历groupby以获取每个站点的值
for stationDf in averagedValuesDf.groupby("stationID"):
    stationID = stationDf[0,0]
    # 为每个站点添加一行
    ax.plot(
        stationDf["time"],
        stationDf["significant_wave_height"],
        label=stationID
)
plt.legend()

总之,如果你习惯了使用matplotlib,polars的数据能够与之无缝连接。

当然,如果你使用其他可视化库,比如Altair、Plotly、holoviews等,这些库也可以与polars直接集成。这在另一篇文章里也有介绍:

从 Pandas 到 Polars 十一:在Polars环境中,Matplotlib与Plotly的比较

退一步说,如果你只习惯使用pandas的数据进行绘图,那也可以使用polars的df.to_pandas()方法将数据转为pandas的格式,只不过在转换为 Pandas DataFrame 时,可能会有一些性能损失,特别是对于大型数据集。

   往期热门文章:

从 Pandas 到 Polars 二十六:在Polars中,不要遍历列

从 Pandas 到 Polars 二十三:如果你的数据已经排序,Polars可以为你提供助力

从 Pandas 到 Polars 十八:数据科学 2025,对未来几年内数据科学领域发展的预测或展望

从 Pandas 到 Polars 十三:流式处理的关键参数

从 Pandas 到 Polars 十:“Polars 表达式“是什么?

从 Pandas 到 Polars 六:在 Polars 中流式处理大型数据集

从 Pandas 到 Polars 0:理解Polars嵌套列类型

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值