Iris植物分类数据可视化散点图(bokeh)


#-*- coding: utf-8 -*-
from bokeh.models import HoverTool
from bokeh.plotting import figure, show, output_file
import pandas as pd
#scikit-learn 库内置著名的Iris植物分类数据集
from sklearn.datasets import load_iris
# 源数据data读取
dataset = load_iris()
data = pd.DataFrame(dataset.data,columns = ('sepalLength','sepalWidth','petalLength','petalWidth'))
data['species'] = dataset.target
# 工具列表
TOOLS="hover,crosshair,pan,wheel_zoom,zoom_in,zoom_out,box_zoom,undo,redo,reset,tap,save,box_select,poly_select,lasso_select,"
# 创建画图
p1 = figure(plot_width=900, plot_height=500, title="Iris Morphology",x_axis_label='Length',y_axis_label='Width',tools=TOOLS)
# 颜色列表
colors = ["red", "olive", "darkred", "goldenrod", "orange", "skyblue", "salmon"]
for i in range(0,3):
    # 分类数据
    species_sepalLength_x = list(data[data['species']==i]['sepalLength'])
    species_sepalWidth_y = list(data[data['species']==i]['sepalWidth'])
    species_petalLength_x = list(data[data['species']==i]['petalLength'])
    species_petalWidth_y = list(data[data['species']==i]['petalWidth'])
    # 这里,以颜色区分种类,以形状区分数据的不同
    # 画点图
    p1.circle(x=species_sepalLength_x, y=species_sepalWidth_y, color=colors[i],size=10,legend='sepal_species: %s'%i,fill_alpha=0.2)
    # 画十字图
    p1.cross(x=species_petalLength_x,y=species_petalWidth_y,color=colors[i],size=10,legend='petal_species: %s'%i,alpha=0.7)
# 图例的位置
p1.legend.location = "top_left"
# 图例的字体颜色
p1.legend.label_text_color = 'black'
# 图例的背景颜色
p1.legend.background_fill_color = "darkgrey"
# 自定义工具显示
hover = p1.select_one(HoverTool)
hover.point_policy = "follow_mouse"
hover.tooltips = [
    ("(Length, Width)", "($x, $y)"),
]
# 保存在本地
output_file("Iris.html")
# 输出到显示器上
show(p1)

在这里插入图片描述

在这里插入图片描述

### 数据可视化中的常见图表类型及其应用场景 数据可视化的核心目标在于通过图形化手段清晰有效地传达复杂的数据信息。为了达到这一目的,选择合适的图表类型至关重要[^1]。 #### 常见的图表类型 以下是几种常用的图表类型以及其适用场景: - **柱状图 (Bar Chart)** 柱状图用于比较不同类别的数值大小,适用于展示离散数据集之间的对比关系[^2]。 - **直方图 (Histogram)** 直方图主要用于显示连续型变量的分布情况,通常用来分析某一范围内数据的数量或频率。 - **饼图 (Pie Chart)** 饼图适合表示部分与整体的关系,尤其当类别较少时效果更佳。然而,在类别过多的情况下可能会影响可读性。 - **箱形图 (Box Plot)** 箱形图能够很好地展现一组或多组数据的五数概括(最小值、下四分位数、中位数、上四分位数和最大值),并能识别异常值。 - **热力图 (Heatmap)** 热力图利用颜色深浅来反映矩阵形式的数据强度变化趋势,非常适合于多维数据分析。 - **散点图 (Scatter Plot)** 散点图常用于探索两个变量之间是否存在某种关联模式或者聚类现象。 - **折线图/线状图 (Line Chart)** 折线图擅长表现时间序列上的动态变化过程,也可以揭示多个维度间的变化规律。 #### 不常见的高级图表类型 除了上述经典图表之外,还有一些不那么普遍但却非常有用的可视化技术值得尝试: - **平行坐标系 (Parallel Coordinates)** 平行坐标允许在同一视图中同时查看高维空间内的样本点位置及属性差异。 - **树状图 (Tree Map)** 树状图采用嵌套矩形区域代替传统节点链接结构呈现层次分类体系下的占比分配状况。 - **网络图 (Network Graphs)** 当研究对象涉及复杂的相互作用关系网路拓扑特性时,则需借助此类工具加以描绘说明。 #### Python 中实现数据可视化的库 Python 提供了许多强大的第三方库支持快速创建高质量统计图表: - `Matplotlib` 是最基础也是功能最为全面的一个绘图包; - `Seaborn` 构建于 Matplotlib之上,提供了更加美观默认样式设置选项的同时简化了一些常用操作流程; - `Plotly` 和 Bokeh 则专注于交互式网页端应用开发需求方面提供解决方案; 下面给出一段简单的例子演示如何用 Seaborn 绘制基本类型的图表: ```python import seaborn as sns import matplotlib.pyplot as plt # 加载内置鸢尾花数据集 iris = sns.load_dataset('iris') # 创建画布布局 fig, axes = plt.subplots(2, 3, figsize=(15,8)) # 设置子图标题字体大小 plt.rcParams.update({'font.size': 10}) # 绘制各种图表实例 sns.barplot(x='species', y='sepal_length', data=iris, ax=axes[0][0]) sns.histplot(data=iris['petal_width'], bins=30, kde=True, color="skyblue", ax=axes[0][1]) sns.boxplot(x='species',y='petal_length',data=iris,palette='vlag',ax=axes[0][2]) sns.heatmap(iris.corr(), annot=True,cmap='coolwarm',center=0,vmin=-1,vmax=1,square=True,lw=.5,linecolor='white',cbar_kws={"shrink": .7},ax=axes[1][0]) sns.scatterplot(x='sepal_length',y='sepal_width',hue='species',style='species',data=iris,alpha=.9,edgecolors='k',linewidth=.5,legend=False,ax=axes[1][1]) sns.lineplot(x='sepal_length',y='sepal_width',hue='species',style='species',markers=True,dashes=False,data=iris.sample(frac=1).reset_index(drop=True),err_style=None,ci=None,ax=axes[1][2]) # 展示最终成果 plt.tight_layout() plt.show() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值