在我对Matplotlib感到沮丧并发表帖子时,我的朋友让我试试Seaborn库。近年来我一直在使用Altair,因此并没有过多考虑Seaborn。然而,Seaborn的新界面给我留下了深刻印象,并且我很高兴地发现,Seaborn将直接接受Polars的DataFrame来进行许多图表绘制。
(注:Seaborn 是一个基于Matplotlib的数据可视化库,它提供了一个高级界面来绘制有吸引力的和有意义的统计图形。Seaborn使复杂图形的绘制变得简单,并且提供了许多内置的主题和调色板来定制图形的外观。Seaborn非常适合数据探索和可视化,特别是当您想从数据中提取有意义的模式或趋势时。)
在这篇文章中,我将探讨如何将Polars的DataFrame传递给Seaborn以进行一些高级图表的绘制,并分享一些使用Seaborn可视化Polars DataFrame的其他技巧。
联合图(Jointplot)
Seaborn中的高级可视化之一就是联合图(jointplot)。这是一种两列的散点图,但每个列的分布也会被绘制出来。此外,我们还可以添加一个色调字段(hue field),通过第三列来为这些图着色。
在这个例子中,我使用了泰坦尼克号数据集,对乘客年龄和支付票价两列进行了联合图绘制,并根据乘客等级列进行了颜色区分。
import polars as plimport seaborn as snsdf = pl.read_csv("titanic.csv")
sns.jointplot(data=(df.with_columns([ # 对Age和Fare的浮点型列取对数 pl.col(pl.Float64).log(),# 将passenger_class的列从当前的数据类型转换为字符串类型 pl.col("Pclass").cast(pl.Utf8)])),x="Age",y="Fare",hue="Pclass",)
数值还是分类?
像Plotly或Seaborn这样的绘图库的一个共同特点是,它们会根据数据的dtype(数据类型)推断数据应该如何呈现。这可能会导致图表以令人困惑的方式显示!
在这个例子中,我们想根据乘客等级(Pclass)列来着色。这一列的值是1、2或3,所以它有一个整数dtype。然而,从绘图的角度来看,这一列实际上是一种有序的分类列,而不是数值列。然而,由于整数dtype,Seaborn和Plotly会将其视为数值列,并尝试将其视为定量数据。
为了解决这个问题,我们必须将Pclass列转换为字符串dtype。我们在上面的示例中通过表达式pl.col("Pclass").cast(pl.Utf8)来实现这一点。然后,图表就会按照我们期望的方式显示。
将Polars DataFrame传递给Seaborn会导致在内部复制你的数据。为了避免不必要的复制,我建议使用select函数只复制你的图表所需的列的子集,例如df.select(["Age","Fare","Pclass"]).to_pandas()。
往期热门文章:
从 Pandas 到 Polars 二十六:在Polars中,不要遍历列
从 Pandas 到 Polars 二十三:如果你的数据已经排序,Polars可以为你提供助力
从 Pandas 到 Polars 十八:数据科学 2025,对未来几年内数据科学领域发展的预测或展望
从 Pandas 到 Polars 十三:流式处理的关键参数
从 Pandas 到 Polars 十:“Polars 表达式“是什么?
从 Pandas 到 Polars 六:在 Polars 中流式处理大型数据集
从 Pandas 到 Polars 0:理解Polars嵌套列类型