鸢尾花的可视化(散点图、小提琴图、以及pyearchs平行坐标图)

一、鸢尾花散点图

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

# 数据准备
from sklearn import datasets

iris = datasets.load_iris()
x, y = iris.data, iris.target
pd_iris = pd.DataFrame(np.hstack((x, y.reshape(150, 1))),
                       columns=['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'class'])
print(pd_iris)
plt.figure(dpi=150)  # 设置图的分辨率

# plt.style.use('Solarize_Light2')  # 使用Solarize_Light2风格绘图 橘色加白色网格线
# plt.style.use('seaborn-white')  #风格为全白
plt.style.use('seaborn')  #风格为浅蓝色加白色网格线

iris_type = pd_iris['class'].unique()  # 根据class列将点分为三类,获得三种类型[0. 1. 2.]
print(iris_type)

iris_name = iris.target_names  # 获取每一类的名称
# print(iris_name)#['setosa' 'versicolor' 'virginica']

colors = ['#c72e29', '#098154', '#fb832d']  # 三种不同颜色
markers = ['$\clubsuit$', 'o', '^']  # 三种不同图形 #$\clubsuit$  ♣形状  '^'为三角形状

for i in range(len(iris_type)):
    plt.scatter(pd_iris.loc[pd_iris['class'] == iris_type[i], 'sepal_length'],  # 传入数据x
                pd_iris.loc[pd_iris['class'] == iris_type[i], 'sepal_width'],  # 传入数据y
                s=50,  # 散点图形(marker)的大小
                c=colors[i],  # marker颜色
                marker=markers[i],  # marker形状
                # marker=matplotlib.markers.MarkerStyle(marker = markers[i],fillstyle='full'),#设置marker的填充
                alpha=0.8,  # marker透明度,范围为0-1
                facecolors='r',  # marker的填充颜色,当上面c参数设置了颜色,优先c
                edgecolors='none',  # marker的边缘线色
                linewidths=1,  # marker边缘线宽度,edgecolors不设置时,该参数不起作用
                label=iris_name[i])  # 后面图例的名称取自label

plt.legend(loc='upper right')
plt.show()

说明其中代码难点

#取出setosa组的子dataFrame 而且全是setosa类别
setosa=pd_iris[pd_iris['class'] == iris_type[0]]
# print(setosa)

#pd.loc[行,列],在行的选择中引入了条件选取
B=pd_iris.loc[pd_iris['class'] == iris_type[0], 'sepal_length'] 
# print(B)

散点图如下:

 二、鸢尾花的箱型图

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

# 数据准备
from sklearn import datasets

iris = datasets.load_iris()
x, y = iris.data, iris.target
pd_iris = pd.DataFrame(np.hstack((x, y.reshape(150, 1))),
                       columns=['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'class'])
print(pd_iris)
plt.figure(dpi=150)  # 设置图的分辨率
plt.style.use('seaborn-white')  #风格为全白

color_list=["#D1B6E1",'#30A9DE','#58C9B9','#9DC8C8']
lables=['sepal_length', 'sepal_width', 'petal_length', 'petal_width']

f=plt.boxplot(pd_iris[['sepal_length', 'sepal_width', 'petal_length', 'petal_width']],
                labels=['sepal_length', 'sepal_width', 'petal_length', 'petal_width'],
                patch_artist=True,
                sym='o',#异常值的形状
                showbox=True,
                showmeans = True,

                widths=0.2
                )


for box, c in zip(f['boxes'], color_list):  # 对箱线图设置颜色
    box.set(color=c, linewidth=2)
    box.set(facecolor=c)


# 这里设置的是各个box的其他属性
for whisker in f['whiskers']: #设置箱型图的端点与箱子的连接线
    whisker.set(color='r', linewidth=0.5)
for cap in f['caps']:  #设置箱型图的端点线
    cap.set(color='g', linewidth=1)
for median in f['medians']:  #设置medians线
    median.set(color='DarkBlue', linewidth=1)
for flier in f['fliers']:
    flier.set(marker='o', color='y', alpha=0.5)
for means in f['means']:
    means.set(color='black')


plt.title('my boxplot')
plt.show()

箱型图如下:

三、鸢尾花的小提琴图

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns

# 数据准备
from sklearn import datasets

iris = datasets.load_iris()
x, y = iris.data, iris.target
pd_iris = pd.DataFrame(np.hstack((x, y.reshape(150, 1))),
                       columns=['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'class'])
print(pd_iris)
plt.figure(dpi=150)  # 设置图的分辨率
plt.style.use('seaborn-white')  #风格为全白

label = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width']
font_1 = {"size": 14}

sns.violinplot(data =pd_iris[['sepal_length', 'sepal_width', 'petal_length', 'petal_width']])
plt.xlabel("category", font_1)
plt.ylabel("Length or width", font_1)
plt.xticks(ticks = [0, 1, 2 ,3], labels = label, fontsize = 11)
plt.yticks(fontsize = 12)
plt.show()

小提琴图如下:

四、鸢尾花的平行坐标图

from pyecharts import options as opts
from pyecharts.charts import Parallel
import pandas as pd

#读数据
result=pd.read_csv('iris.csv')
print(result)
#分组,按照花的类型分组
A=result[result['species']=='setosa']
B=result[result['species']=='versicolor']
C=result[result['species']=='virginica']
print(result['sepal_length'].max())
#Iris-setosa的数据
data1=[]
for a in range(0,len(A)):   # 计算列表A的长度,进行循环切片
    data1.append(A.values.tolist()[a][0:])
#Iris-versicolor的数据
data2=[]
for b in range(0,len(B)):
    data2.append(B.values.tolist()[b][0:])
#Iris-virginica的数据
data3=[]
for c in range(0,len(C)):
    data3.append(C.values.tolist()[c][0:])
#输出数据看数据的形式是否正确
print(data1,'\n',data2,'\n',data3)


c = (     Parallel()
          .add_schema(
          [
              opts.ParallelAxisOpts(dim=0, name="sepal length",is_scale=True ,min_=4,max_=8),
              opts.ParallelAxisOpts(dim=1, name="sepal width",is_scale=True,min_=2,max_=4.5),
              opts.ParallelAxisOpts(dim=2, name="petal length",is_scale=True,min_=1,max_=7),
              opts.ParallelAxisOpts(dim=3, name="petal width",is_scale=True,min_=0,max_=2.5),#自动划分范围is_scale=True
              opts.ParallelAxisOpts(dim=4,  name="分类", type_="category",
                                    data=["setosa", "versicolor", "virginica"]),
              ])
          .add("setosa", data1)
          .add("versicolor", data2)
          .add("virginica", data3)

          .set_global_opts(title_opts=opts.TitleOpts(
               title="Parallel cordlnate plot, Fisher's iris data",pos_top="top",pos_right="center"),
               legend_opts=opts.LegendOpts( pos_top="bottom",pos_right="center"),yaxis_opts=opts.AxisOpts(
	                min_='dataMin',max_="dataMax"
	        ))
          .render("parallel.html")
)

平行坐标图如下:

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
鸢尾花数据集是机器学习领域中非常经典的一个数据集,包含150条记录,每条记录有4个特征,分别是花萼长度、花萼宽度、花瓣长度、花瓣宽度,以及它们所属的3个类别之一:Setosa、Versicolour、Virginica。 我们可以使用ECharts来对这个数据集进行可视化分析,具体步骤如下: 1.准备数据 首先,我们需要将鸢尾花数据集导入到程序中,并进行处理。可以使用Python的pandas库来读取CSV文件,然后将数据转换成ECharts需要的格式。 2.绘制散点图 使用ECharts的散点图功能,将每个样本点绘制在坐标系上。可以根据鸢尾花的类别,将不同类别的样本点用不同的颜色表示。 3.添加坐标轴例 通过设置xAxis、yAxis和legend等属性,添加坐标轴例,使得表更加清晰易懂。 4.添加工具箱 使用ECharts的工具箱功能,可以为表添加一些交互式的工具,如缩放、刷新、保存等。 以下是一份基于ECharts的鸢尾花数据可视化代码示例: ```javascript // 基于ECharts的鸢尾花数据可视化 // 导入数据 var data = [ [5.1, 3.5, 1.4, 0.2, 'Setosa'], [4.9, 3.0, 1.4, 0.2, 'Setosa'], [4.7, 3.2, 1.3, 0.2, 'Setosa'], [4.6, 3.1, 1.5, 0.2, 'Setosa'], ... ]; // 转换数据格式 var series = []; for (var i = 0; i < data.length; i++) { var item = { value: [data[i][0], data[i][1], data[i][2], data[i][3]], symbol: 'circle', symbolSize: 10, itemStyle: { color: data[i][4] === 'Setosa' ? 'red' : data[i][4] === 'Versicolour' ? 'green' : 'blue' } }; series.push(item); } // 绘制表 var myChart = echarts.init(document.getElementById('main')); myChart.setOption({ title: { text: '鸢尾花数据可视化' }, tooltip: {}, legend: { data: ['Setosa', 'Versicolour', 'Virginica'] }, xAxis: {}, yAxis: {}, series: [{ name: 'Setosa', type: 'scatter', data: series.filter(function(item) { return item.itemStyle.color === 'red'; }) }, { name: 'Versicolour', type: 'scatter', data: series.filter(function(item) { return item.itemStyle.color === 'green'; }) }, { name: 'Virginica', type: 'scatter', data: series.filter(function(item) { return item.itemStyle.color === 'blue'; }) }], toolbox: { feature: { saveAsImage: {} } } }); ``` 这份代码将鸢尾花数据集中的四个特征绘制在坐标系上,不同类别的样本点用不同的颜色表示,表中还包含了例和工具箱。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值