站点图标 AI技术聚合

数据可视化——用python绘制气泡图、三维散点图、多重柱形图案例

目录


前言

气泡图与散点图十分相似,它们总称为数据关系型图,散点图主要分为二维散点图与三维散点图、常用于反映数值之间的相对位置,而气泡图常用于展示三维甚至四维变量的关系,由一个个像气泡元素组成。而多重柱形图可以用来展现某个分类下多个数据的对比。接下来让我们一起来看看气泡图和、三维散点图和多重柱形图的绘制。本人也是一位正在学习中的新手,了解有限,有什么错误的地方大家多多指点。

一、气泡图的绘制

1、什么是气泡图?他适用于什么数据?

气泡图的其中一条变量的表现形式是体现在气泡的大小或颜色深浅上,如果一个数据集中包含非常多的点,那么散点图可以将这些数据对比的结果一目了然,是比较适用的。

2、图形效果展示

3、导入需要用到的库

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

在这里我们导入pandas库,pandas库是数据分析中非常常用的库,用于读取csv、xls等文件中的数据。

从pyecharts导入options,在生成图表时,可以根据实际情况设置这些选项更改外观

4、读取要分析的数据

下面以航空公司数据为例,分析年龄、飞行次数、飞行间隔之间的关系

data = pd.read_excel(r'航空公司数据-剔除空年龄.xlsx')

 在这里,我读取的是xls文件,如果你需要读取的文件为csv,那你可以参照这个写法:

                data = pd.read_csv(r’航空公司数据-剔除空年龄.csv’,encoding = ‘gbk’)

注意:当目标文件和当前文件不在同级目录时,读取数据时可以考虑使用绝对路径或者在相对路径前加上相对路径特殊符号,如:../、../../

5、检查数据是否有问题

data_select = data.loc[:100,['年龄','飞行次数','最大乘机时间间隔']]
data_select.isnull().sum()

                                         

loc[]切片:使用.loc[ ]第一个参数是行索引,第二个参数是列索引

pandas库中有一个isnull()函数,它可以用来判断缺失值

其中:isnull().sum()可以用于查询每列缺失值的数量

           isnull().any()可以用于判断哪些列包含缺失值,并且在缺失值返回True,反之False。

注意:如果数据有异常值也需要对异常值进行处理

6、将要对比数据提取出来

x = data_select['飞行次数'].tolist()
y = data_select['最大乘机时间间隔'].tolist()
z = data_select['年龄'].tolist()
x

.tolist()函数可以将数组或矩阵转换为列表,它的返回值以list的形式出现

7、画图

color_range = ['#ffcc00','#ff7f00','#ff0000']
c = (
    Scatter(init_opts=opts.InitOpts(width="800px", height="400px"))
    .set_global_opts(
        xaxis_opts=opts.AxisOpts(
            type_="value", 
            splitline_opts=opts.SplitLineOpts(is_show=True),
            name = '飞行次数', # 坐标轴名称
            name_location = 'center',
            name_gap = 30
        ),
        yaxis_opts=opts.AxisOpts(
            type_="value",
            splitline_opts=opts.SplitLineOpts(is_show=True),
            name = '最大乘机时间间隔',
            name_location = 'center',
            name_gap = 30
        ),
        legend_opts = opts.LegendOpts(pos_top='5%'), # 图示位置
    )
)
for i,j,q in zip(x,y,z):
    c.add_xaxis(xaxis_data = [i]) 
    c.add_yaxis(
        series_name='气泡大小:年龄', # 巧用序列名称和图示来提示气泡大小的含义
        y_axis = [j],
        symbol_size = q//3, # 根据年龄数据定义合适的气泡大小
        color = '#ff8080'
    )
c.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
c.render_notebook()

在这里应用了matplotlib模块中的scatter函数绘制了气泡图,气泡的大小代表年龄

xAxis代表坐标系中的x轴 ,yAxis代表坐标系中的y轴

type:坐标轴类型,’value’—数据轴、’time’—时间轴、’log’—对数轴、’category’—类目轴

name:坐标轴名称

nameLocation:坐标轴名称的位置

for in zip():并行遍历,zip()函数可以将多个序列打包在一起,然后同时遍历它们

label_opts:标签配置项

color:配置颜色

is_show:是否显示标签(True 、Flase)

render_notebook:直接调用render_notebook方法可以随时随地的渲染图表

还有更多的配置项可以查看官网文档

二、三维散点图的绘制


1、什么是三维散点图?

三维散点图可以反映三个数值之间的关系,他是一个立体的图形,我们可以理解为将气泡图的三维数据绘制到三维坐标系,就形成了三维散点图。

在这里,用的数据与气泡图的一样,以航空公司数据为例,分析年龄、飞行次数、飞行间隔之间的关系,所以不再展示数据的处理

2、导入需要用到的数据库

import pyecharts.options as opts
from pyecharts.charts import Scatter3D

3、画图

c = (
    Scatter3D()
    .add(
        '',
        data = [[i,j,k] for i,j,k in zip(x,y,z)], # 数据:二维数组
        xaxis3d_opts=opts.Axis3DOpts( # x轴配置
            name='飞行次数',
            type_="value",
        ),
        yaxis3d_opts=opts.Axis3DOpts( # y轴配置
            name='最大乘机时间间隔',
            type_="value",
        ),
        zaxis3d_opts=opts.Axis3DOpts( # z轴配置
            name='年龄',
            type_="value",
        ),
    )
    .set_global_opts(
        visualmap_opts=opts.VisualMapOpts(
                max_= max(z),
                range_color=[
                    "#1710c0",
                    "#0b9df0",
                    "#00fea8",
                    "#00ff0d",
                    "#f5f811",
                    "#f09a09",
                    "#fe0300",
                ],
        ),
    )
)
c.render_notebook()

三维散点图的第三条数据展现在z轴上,通过对z轴的数据进行颜色设置,展现出年龄的大小,与气泡图不同,气泡图是表现在气泡的颜色和大小上。

name:坐标轴名称

type:坐标轴类型,’value’—数据轴、’time’—时间轴、’log’—对数轴、’category’—类目轴

color:配置颜色

render_notebook:直接调用render_notebook方法可以随时随地的渲染图表

还有更多的配置项可以查看官网文档:

相关配置https://gallery.pyecharts.org/#/Scatter3D/scatter3d

三、多重柱形图的绘制

1、什么是多重柱形图?

多组柱形图也叫作簇状柱形图,它是用来展现某个分类下多个数据的对比。

2、效果图展示

3、导入需要用到的库

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

4、读取要分析的数据

data_user = pd.read_excel(r'新用户表.xlsx')

5、分组聚合

result = data_user.groupby(by=['性别','城市'])['姓名'].count()
result_man = result['男']
result_woman = result['女']
result_woman

对数据内部进行分组处理时,可以通过pandas下的groupby()函数来解决。

count() 方法用于统计字符串里某个字符或子字符串出现的次数。

result()通常用于存储函数或方法的返回值

6、遍历

[i for i in result_man.index]
y1 = result_man.tolist()
y2 = result_woman.tolist()

用for i in x的所有遍历结果i来组成一个新的列表

tolist()可以将数组作为(可能是嵌套的)列表返回。

7、画图

# 数据类型的转换
x = [i for i in result_man.index] # 转换成list对象
y1 = result_man.tolist()
y2 = result_woman.tolist()
bar = (
    Bar(
        init_opts=opts.InitOpts(width='600px',height='400px') # 初始化配置项
       )
    .add_xaxis(x)
    .add_yaxis("男",y1,color = 'pink')
    .add_yaxis("女", # 图示名称
               y2, # 数据
               color = 'skyblue',
               gap='0%' # 柱子之间的间隔
              )
#     .set_colors([ "#00ff00", "#ffcc00"])  # 另一种颜色设置方法
    .set_global_opts(title_opts=opts.TitleOpts(title="Bar-基本示例", 
                                               subtitle="我是副标题"
                                              )
                    )
)

从pyecharts.charts中调用Bar柱状图

add_xaxis() 添加x轴坐标

add_yaxis() 添加y轴坐标

还有更多的配置项可以查看官网文档:

相关配置https://gallery.pyecharts.org/#/Bar/bar_base_dict_config

四、总结

在这里简单的介绍了气泡图、三维散点图和多重柱形图,总的来说,通过数据可视化可以很直观的了解多数据集,增加了数据展示的可读性和信息量,今天的的分享就到这里了,希望能够给你带来帮助。

文章出处登录后可见!

已经登录?立即刷新
退出移动版