Matplotlib Plot 与 Bokeh 的对比分析
在 Python 环境下,Matplotlib 和 Bokeh 是两个十分常用的绘图工具库。Matplotlib 是一个历史悠久,非常强大的数据可视化工具,它能够创建多种类型的图表,包括线性图、散点图、直方图等等。而 Bokeh 则是一个较新的数据可视化库,可以创建交互式图表。在本篇文章中,我们将对 Matplotlib 和 Bokeh 进行对比分析。
阅读更多:Matplotlib 教程
Matplotlib Plot
简介
Matplotlib 可以满足绝大多数绘图需求,同时也能与其他工具库搭配使用。Matplotlib 提供了大量的函数和设置选项,支持定制化图表,使其风格、字体、颜色等多方面都可以依照个人需求自由调整。
示例
在 Matplotlib 中,绘制简单的直线可以使用下面这段代码:
import matplotlib.pyplot as plt
x = [1, 2, 3, 4]
y = [1, 4, 9, 16]
plt.plot(x, y)
plt.show()
我们也可以使用 Matplotlib 进行更多样化的绘图,例如:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 2*np.pi, 100)
y1 = np.sin(x)
y2 = np.cos(x)
plt.plot(x, y1, label='sin(x)')
plt.plot(x, y2, label='cos(x)')
plt.title('Sin(x) and Cos(x) Curves')
plt.xlabel('x label')
plt.ylabel('y label')
plt.legend()
plt.show()
Bokeh
简介
Bokeh 与 Matplotlib 几乎相反,是一个交互式可视化库,允许用户可以探索数据,并创建交互式的可视化图表。对于想通过应用程序或网页来分享分析结果的开发者来说,Bokeh 是一个很好的选择。
示例
Bokeh 主要通过构建绘图对象来完成可视化,示例如下:
from bokeh.plotting import figure, show
p = figure(title="Line plot", x_axis_label='x', y_axis_label='y')
x = [1, 2, 3, 4]
y = [1, 4, 9, 16]
p.line(x, y, legend="line", line_width=2)
show(p)
代码运行后会得到一个与 Matplotlib 绘制的图形相同的图像,但是与 Matplotlib 不同的是,这个图标是交互式的,并且具有更多的一些特性(例如缩放、放大和查看数据点)
下面我们再来一个更复杂一点的实例:
from bokeh.models import ColumnDataSource
from bokeh.layouts import row, column
from bokeh.models.widgets import Tabs, Panel
from bokeh.io import curdoc
df = pd.read_csv('https://raw.githubusercontent.com/mwaskom/seaborn-data/master/iris.csv')
source = ColumnDataSource(df)
scatter = figure(title="Iris Dataset", x_axis_label='Sepal Length', y_axis_label='Petal Length', height=300)
scatter.circle(x='sepal_length', y='petal_length', color='green', size=10, source=source)
hist, edges = np.histogram(df['petal_length'], bins=25)
hist1 = figure(title="Histogram of Petal Length", background_fill_color="#fafafa")
hist1.quad(top=hist, bottom=0, left=edges[:-1], right=edges[1:], fill_color="navy", line_color="white", alpha=0.5)
hist2, edges = np.histogram(df['sepal_length'], bins=25)
hist2 = figure(title="Histogram of Sepal Length", background_fill_color="#fafafa")
hist2.quad(top=hist2, bottom=0, left=edges[:-1], right=edges[1:], fill_color="firebrick", line_color="white", alpha=0.5)
tab1 = Panel(child=scatter, title="Scatter Plot")
tab2 = Panel(child=row(hist1, hist2), title="Histograms")
tabs = Tabs(tabs=[tab1, tab2])
curdoc().add_root(tabs)
以上代码主要绘制了一张关于 Iris DataSet 数据集的散点图,同时也绘制了两张关于 Iris DataSet 数据集的直方图,并将这些图表绘制在一起,以便用户更好地查看数据分布情况。
对比分析
对数据量的支持
对于不同大小的数据集,Matplotlib 和 Bokeh 都可以绘制出高质量的图表。Matplotlib 在面对大量数据时表现良好,但绘制交互式图表时的效果则比较一般,因为在使用 Matplotlib 时,每次改变图表的属性时都必须重新绘制整个图表,这可能会在交互式过程中导致卡顿。而 Bokeh 在处理大数据集时更具优势,因为 Bokeh 可以利用浏览器的 WebGL 技术绘制图表,可以非常迅速地绘制海量数据。
对数据可视化的支持
Matplotlib 能够绘制大量类型的图表,包括折线图、散点图、直方图等等,而 Bokeh 也提供了大量可视化工具,例如散点图、折线图、柱状图、热力图等等。Bokeh 还支持使用 Python 代码控制图表动态变化。因此,对于一些需要快速创建交互式可视化界面的场景,Bokeh 显然是一个更好的选择。
对定制化的支持
Matplotlib 提供了许多自定义选项,可以帮助用户制作独特的图表。在 Matplotlib 中,可以通过修改线宽、线型、颜色、标记和字体等属性来控制图表的外观,还可以添加背景、网格线和标签等元素来增加绘图信息。而 Bokeh 则不太支持细节调整,其设计初衷是为了创建漂亮的交互式图表而非美观的静态图表。因此,要想绘制定制化图表,Matplotlib 会更适合。
总结
综上所述,Matplotlib 和 Bokeh 是两个各具特色的数据可视化工具库。当需要创建交互式可视化应用时,Bokeh 是一个很好的选择。而想要绘制复杂的静态图表,Matplotlib 显然更有优势。 根据实际需求和场景,开发者可以选择最适合自己的数据可视化工具库,以便更好地展示数据。