设置绘图后端
我们可以使用 hv.extension 更改绘图后端。但是,我们不在此处运行此单元格,因为它会导致下面的 Matplotlib/Seaborn 图表无法渲染。
注释:
hvPlot 利用 HoloViews 库来构建图表,并且可以使用多个后端进行渲染,包括 Bokeh(默认)和 Matplotlib。
hv.extension
是一个函数,用于设置 hvPlot 的绘图后端。当你使用 hv.extension
指定一个后端时,比如 Bokeh 或 Matplotlib,hvPlot 将会使用这个后端来渲染所有后续的图表。
然而,在 Jupyter Notebook 或类似的环境中,当你设置了一个特定的后端,如 Bokeh,然后尝试渲染一个依赖于不同后端(如 Matplotlib)的图表时,后一个图表可能不会正确显示,因为它试图使用已经被设置为 Bokeh 的环境来渲染。这是因为 Jupyter Notebook 的输出环境被配置为了 Bokeh,而不再是 Matplotlib。
如果在某个点上设置后端为 Bokeh,那么接下来使用 Matplotlib 或 Seaborn(基于 Matplotlib 的绘图库)绘制的图表可能不会显示,除非你重新设置或重置后端。
为了避免这个问题,你可以在使用 hvPlot 之前或之后单独运行设置后端的代码,或者在不同的会话或内核中处理不同的后端。这确保了每个后端都在其适当的环境中运行,不会相互干扰。如果你在一个脚本中需要使用多种后端,你可能需要手动切换后端,或者使用独立的绘图区域来确保兼容性。
python
hv.extension('matplotlib')
可用的后端包括:
- Bokeh
- Plotly
- Matplotlib
可用的绘图类型
.plot 方法可用的绘图类型将随着时间的推移而发展。我们可以通过在 df.plot 上使用 Python 的 dir 函数来打印当前可用的方法列表,从而查看当前的可用列表。
python
[el for el in dir(df.plot) if not el.startswith("_") ]
area
bar
barh
bivariate
box
dataset
density
errorbars
explorer
heatmap
hexbin
hist
kde
labels
line
ohlc
paths
points
polygons
scatter
step
table
vectorfield
violin
我们将在下面演示更多这些内容
折线图
我们创建一个简单的时间序列 DataFrame 来制作折线图
python
p = (
pl.DataFrame(
{
"time":[0,1,2,3,4],
"val":[0,1,2,3,4],
}
)
.plot
.line(
x="time",
y="val"
)
)
hv.show(p)
要制作多线图,你可以:
- 指定一列作为x轴维度,然后将所有其他数值列分别绘制为不同的线条
- 将列名列表传递给 y
因此,无论是否在此处注释掉 y 行,我们都会得到相同的图表。
python
p = (
pl.DataFrame(
{
"time":[0,1,2,3,4],
"val":[0.0,1,2,3,4],
"vals2":[10.0,11,12,13,14]
}
)
.plot
.line(
x="time",
y=["val","vals2"]
)
)
hv.show(p)
蜡烛图
OHLC 是一种有用的图表类型,用于可视化股票走势。
默认情况下,OHLC 会假定索引或第一个日期时间列应映射到 x 轴,而前四个非日期时间列分别对应于 O(开盘价)、H(最高价)、L(最低价)和 C(收盘价)组件。
因此,默认调用 ohlc 相当于:
python
df.plot.ohlc('date', ['open', 'low', 'high', 'close'], grid=True)
我们现在来画一个简单的蜡烛图:
python
import polars as pl
import hvplot as hv
data = [ ## 字段为:time, open, high,low,close
(1., 10, 13, 5, 11),
(2., 13, 17, 9, 12),
(3., 13, 14, 11, 13),
(4., 14, 15, 5, 11),
(5., 15, 19, 8, 12),
(6., 9, 15, 8, 10),
]
df = pl.DataFrame(
data,
schema=['time','open','high','low','close'],
orient="row"
)
p = df.plot.ohlc('time',['open','high','low','close'])
hv.show(p)
Polars简明基础教程系列
Polars简明基础教程十:Numpy和Pandas的相互转换(2)
Polars简明基础教程九:Numpy和Pandas的相互转换(1)
Polars简明基础教程八:Series 和 DataFrame 以及它们之间的转换_B
Polars简明基础教程七:Series 和 DataFrame 以及它们之间的转换_A
Polars简明基础教程六:什么是Polars的"DataFrame(数据框)_下"
Polars简明基础教程五:什么是Polars的"DataFrame(数据框)_上"