(示例中用到的csv数据文件可在CSDN 免费下载:“泰坦尼克号生还者数据集”):
import polars as pl
import hvplot as hv
import matplotlib.pyplot as plt
import seaborn as sns
import plotly.express as px
import altair as alt
import vegafusion as vf
csv_file = r"..\data\titanic.csv"
df = pl.read_csv(csv_file)
passenger_class_counts_df = (
df['pclass']
.value_counts()
.sort("pclass")
)
直方图
我们可以从表达式中制作直方图
p = df.select("fare").plot.hist()
hv.show(p)
或者从Series中。在这个例子中,我们设置了箱体的数量
p = df["fare"].plot.hist(bins=20)
hv.show(p)
直接使用外部库绘图
我们还可以直接将Polars的DataFrame传递给外部库。
Matplotlib
我们可以直接将passenger_class_counts_df的列传递给Matplotlib
有时会遇到这个图表和下面的Seaborn图表无法渲染的问题,可以尝试增加“plt.show()”方法试试。
plt.bar(
x=passenger_class_counts_df["pclass"],
height=passenger_class_counts_df["count"]
)
plt.show()
请注意,在Polars中pclass列是一个整数列,但图表中的x轴是浮点轴。为了使x轴显示为分类整数轴,我们将整数转换为字符串
passenger_class_counts_string_column_df = (
passenger_class_counts_df
.with_columns(
pl.col("pclass").cast(pl.Utf8)
)
)
plt.bar(
x=passenger_class_counts_string_column_df["pclass"],
height=passenger_class_counts_string_column_df["count"]
)
plt.show()
Matplotlib没有直接支持Polars。但是,Matplotlib可以接受Polars的Series,因为它只需要可以通过标准Python方法(Series支持的方法)遍历的序列类型对象。
Seaborn
我们可以将Polars的DataFrame传递给Seaborn来绘制许多图表。请注意,Seaborn通常会在内部将数据复制到Pandas,因为它大量使用了Pandas特有的功能,如索引。如果DataFrame很大,您可能只想传递绘图所需的列,以避免整个DataFrame都被复制!
sns.barplot(
passenger_class_counts_df,
x="pclass",
y="count",
color='green'
)
plt.show()
一些更复杂的Seaborn图表也可以直接接受 Polars 的 DataFrame,如 sns.scatterplot 或sns.jointplot。在这个例子中,我们根据乘客等级对年龄(对数)和票价(对数)进行联合绘图
sns.jointplot(
data=(
df
.with_columns(
[
pl.col(pl.Float64).log(),
pl.col("pclass").cast(pl.Utf8)
]
)
),
x="age",
y="fare",
hue="pclass",
)
plt.show()
Plotly
我们可以直接将DataFrame传递给Plotly。
请注意,我们再次使用带有字符串列的DataFrame以获取正确的输出(忽略Plotly内部可能产生的任何Pandas警告)
另外,在pycharm中运行代码时有时可能在浏览器中显示不了图像,可以尝试重启浏览器试试。
fig = px.bar(
passenger_class_counts_string_column_df,
x="pclass",
y="count",
color="pclass",
width=400
)
fig.show()
Polars简明基础教程系列
Polars简明基础教程十:Numpy和Pandas的相互转换(2)
Polars简明基础教程九:Numpy和Pandas的相互转换(1)
Polars简明基础教程八:Series 和 DataFrame 以及它们之间的转换_B
Polars简明基础教程七:Series 和 DataFrame 以及它们之间的转换_A
Polars简明基础教程六:什么是Polars的“DataFrame(数据框)_下”
Polars简明基础教程五:什么是Polars的“DataFrame(数据框)_上”