📅  最后修改于: 2023-12-03 15:33:58.292000             🧑  作者: Mango
Bokeh 是 Python 中的一个交互式可视化库,可以制作一些非常酷炫的交互式图表和可视化。在这篇文章中,我们将使用 Bokeh 可视化 Iris 数据集。
鸢尾花(Iris)数据集是一份经典的数据集,在机器学习和统计学领域中非常常用。数据集包含 150 行数据,每行数据对应一朵鸢尾花,包含 4 个特征:花萼长度、花萼宽度、花瓣长度和花瓣宽度,以及每朵花属于三个不同种类中的哪一种。
首先,我们需要获取 Iris 数据集。在 Python 中,可以使用 Scikit-learn 提供的 datasets 模块来获取数据:
from sklearn import datasets
iris = datasets.load_iris()
接下来,我们将绘制一个散点图,用于显示花萼长度和花萼宽度之间的关系。我们可以通过 Pandas 将数据集加载为 Pandas DataFrame,然后使用 Bokeh 来进行可视化。
import pandas as pd
from bokeh.plotting import figure
from bokeh.io import show
iris_df = pd.DataFrame(iris.data, columns=iris.feature_names)
plot = figure(title="花萼长度 vs 花萼宽度", x_axis_label="花萼长度", y_axis_label="花萼宽度")
plot.circle(x=iris_df["sepal length (cm)"], y=iris_df["sepal width (cm)"], size=10)
show(plot)
这将绘制一个散点图,显示花萼长度和花萼宽度之间的关系。在 Bokeh 中,可以通过类似于 Matplotlib 中的 pyplot 来进行绘图,这里我们使用 figure
创建一个绘图对象,并设置标题和轴标签。然后,我们使用 circle
方法画出所有的点,并指定其 x 和 y 坐标。
接下来,我们将通过 Bokeh 绘制所有特征之间的散点图和联合分布图。我们可以使用 Pandas 的 Corr() 方法获取所有特征之间的相关系数,并使用 Bokeh 绘制联合分布图。
from bokeh.layouts import gridplot
from bokeh.models import ColumnDataSource
iris_df["species"] = iris.target_names[iris.target]
source = ColumnDataSource(iris_df)
scatter_plots = []
for i, feature1 in enumerate(iris_df.columns[:-1]):
for j, feature2 in enumerate(iris_df.columns[:-1]):
if i != j:
scatter_plot = figure(title=f"{feature1} vs {feature2}", x_axis_label=feature1, y_axis_label=feature2)
scatter_plot.circle(x=feature1, y=feature2, size=10, source=source, legend_field="species", color="species")
scatter_plots.append(scatter_plot)
grid = gridplot([scatter_plots[i:i+4] for i in range(0, len(scatter_plots), 4)])
show(grid)
此代码将绘制一个 4x4 网格,每个小图都显示了两个不同的特征之间的关系。我们可以通过 ColumnDataSource
将 Pandas DataFrame 传递到 Bokeh 中,然后使用 circle
方法画出所有的点,并指定它们的源和颜色。Bokeh 将自动以每一种花的颜色显示点。
这里我们学习了如何使用 Bokeh 来可视化 Iris 数据集,包括绘制花萼长度和花萼宽度的散点图、以及绘制所有特征之间的散点图和联合分布图。除此之外,Bokeh 还支持各种其他类型的图表,例如条形图、折线图、热力图等等,您可以根据需要自由选择所需的可视化类型。