【长文干货】Python可视化教程

文章目录

    • 数据介绍
    • Matplotlib
      • 散点图
      • 折线图
      • 柱形图
      • 直方图
    • Seaborn
      • 散点图
      • 折线图
      • 柱形图
      • 直方图
    • Bokeh
      • 散点图
      • 折线
      • 条形图
      • 交互式
    • Plotly
      • 基本
      • 组合优化:定制化下拉菜单
    • 总结

数据介绍

在这个小费数据集中,我们记录了20世纪90年代初期餐厅顾客在两个半月内给出的小费情况。数据集包含了total_bill(总账单金额)、tip(小费金额)、sex(性别)、smoker(是否吸烟)、day(就餐日期)、time(就餐时间)、size(就餐人数)等六列信息。

数据下载:

链接: https://pan.baidu.com/s/1gnxI3CM7EVqCAzAGCbtSrg 提取码: 7it9 

读取数据:

import pandas as pd


# 读取数据
data = pd.read_csv("tips.csv")

# 展示前10行
display(data.head(10))

如下所示:
在这里插入图片描述

Matplotlib

Matplotlib是一个强大而灵活的低级数据可视化库,它建立在NumPy数组上。它提供了各种图形,如散点图、折线图、柱形图等。

要安装Matplotlib,可以使用以下命令:

pip install matplotlib

散点图

散点图用于观察变量之间的关系,可以使用Matplotlib的scatter()方法进行绘制。

import pandas as pd
import matplotlib.pyplot as plt
 
 
# 数据
data = pd.read_csv("tips.csv")
 
# 绘制天和小票关系
plt.scatter(data['day'], data['tip'])
 
# 添加标题
plt.title("Scatter Plot")
 
# 添加横纵坐标
plt.xlabel('Day')
plt.ylabel('Tip')
 
plt.show()

如下所示:
在这里插入图片描述

如果想要增添颜色和调整点的大小,可以通过scatter()函数的c和s参数来实现。此外,colorbar()方法可用于显示颜色条。

折线图

折线图用于表示两个变量在不同轴上的关系,使用Matplotlib的plot()函数进行绘制。

import pandas as pd
import matplotlib.pyplot as plt
 
 
# 读取数据
data = pd.read_csv("tips.csv")
 
# 绘制小票和大小关系
plt.plot(data['tip'])
plt.plot(data['size'])
 
#添加标题
plt.title("Scatter Plot")
 
# 添加横纵坐标
plt.xlabel('Day')
plt.ylabel('Tip')
 
plt.show()

如下:
在这里插入图片描述

柱形图

柱形图用于以矩形条的长度和高度表示数据类别。可以使用Matplotlib的bar()方法创建柱形图。


import pandas as pd
import matplotlib.pyplot as plt
 

data = pd.read_csv("tips.csv")
 

plt.bar(data['day'], data['tip'])
 
plt.title("Bar Chart")
 
plt.xlabel('Day')
plt.ylabel('Tip')
 
# Adding the legends
plt.show()

如下:
在这里插入图片描述

直方图

直方图用于以组的形式表示数据,可以使用Matplotlib的hist()函数进行绘制。

import pandas as pd
import matplotlib.pyplot as plt
 
data = pd.read_csv("tips.csv")
plt.hist(data['total_bill'])
 
plt.title("Histogram")
plt.show()

如下:
在这里插入图片描述

Seaborn

Seaborn是建立在Matplotlib之上的高级接口,提供了漂亮的设计风格和调色板,使得绘制更具吸引力的图表变得简单。

要安装Seaborn,可以使用以下命令:

pip install seaborn

Seaborn的scatterplot()方法用于绘制散点图。

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

data = pd.read_csv("tips.csv")

# 绘制天和小费关系的散点图
sns.scatterplot(x='day', y='tip', data=data)

plt.show()

如下:
在这里插入图片描述

散点图

与Matplotlib不同的是,在Seaborn中,使用hue参数可以轻松地按性别对每个点进行着色。

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

data = pd.read_csv("tips.csv")

# 根据性别绘制天和小费关系的散点图
sns.scatterplot(x='day', y='tip', data=data, hue='sex')

plt.show()

如下:
在这里插入图片描述
你会发现,在使用 Matplotlib 时,如果你想根据性别给这个图的每个点着色,那会很困难。但是在散点图中,它可以在色调参数的帮助下完成。

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
 
data = pd.read_csv("tips.csv")
 
sns.scatterplot(x='day', y='tip', data=data,
               hue='sex')
plt.show()

如下:
在这里插入图片描述

折线图

Seaborn的lineplot()方法用于绘制折线图。

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
 
 
data = pd.read_csv("tips.csv")
 
sns.lineplot(x='day', y='tip', data=data)
plt.show()

如下:
在这里插入图片描述

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
 
 
data = pd.read_csv("tips.csv")
 
# 去除一个总额度列再绘制
sns.lineplot(data=data.drop(['total_bill'], axis=1))
plt.show()

如下:
在这里插入图片描述

柱形图

Seaborn的barplot()方法用于绘制柱形图。

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
 
data = pd.read_csv("tips.csv")
 
sns.barplot(x='day',y='tip', data=data, 
            hue='sex')
 
plt.show()

如下:
在这里插入图片描述

直方图

Seaborn 中的直方图可以使用 histplot() 函数绘制。

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
 
 
data = pd.read_csv("tips.csv")
 
sns.histplot(x='total_bill', data=data, kde=True, hue='sex')
 
plt.show()

如下:
在这里插入图片描述
在使用Seaborn时,相比于Matplotlib,我们可以更轻松地自定义图表。而且,Seaborn是基于Matplotlib构建的,因此在使用Seaborn时仍然可以利用Matplotlib的自定义函数。

Bokeh

Bokeh以其交互式图表而著称,使用HTML和JavaScript渲染图形,提供了优雅、简洁且高度交互性的现代图形。
在这里插入图片描述

要安装Bokeh,可以使用以下命令:

pip install bokeh

散点图

Bokeh的scatter()方法用于绘制散点图。

from bokeh.plotting import figure, output_file, show
from bokeh.palettes import magma
import pandas as pd
 
 
#初始化
graph = figure(title = "Bokeh Scatter Graph")
 
# 读取
data = pd.read_csv("tips.csv")
 
color = magma(256)
 
# 绘制
graph.scatter(data['total_bill'], data['tip'], color=color)
 
# 显示
show(graph)

如下:
在这里插入图片描述

折线

from bokeh.plotting import figure, output_file, show
import pandas as pd
 
 
graph = figure(title = "Bokeh Bar Chart")
 

data = pd.read_csv("tips.csv")
 
# tip column
df = data['tip'].value_counts()
 
# 绘制
graph.line(df, data['tip'])
 
#展示
show(graph)

如下:
在这里插入图片描述

条形图

Bokeh中的条形图可以使用vbar()方法创建。

from bokeh.plotting import figure, output_file, show
import pandas as pd
 
 
graph = figure(title = "Bokeh Bar Chart")
 
data = pd.read_csv("tips.csv")
 
graph.vbar(data['total_bill'], top=data['tip'])
 
show(graph)

如下:
在这里插入图片描述

交互式

Bokeh提供了交互式图表的功能,可以使用GUI元素如按钮、滑块、复选框等。

from bokeh.plotting import figure, output_file, show
import pandas as pd
 
 
# 初始化
graph = figure(title = "Bokeh Bar Chart")
 
# 数据读取
data = pd.read_csv("tips.csv")
 
# 绘制
graph.vbar(data['total_bill'], top=data['tip'], 
           legend_label = "Bill VS Tips", color='green')
 
graph.vbar(data['tip'], top=data['size'], 
           legend_label = "Tips VS Size", color='red')
 
graph.legend.click_policy = "hide"
 
# 展示
show(graph)

如下:

在这里插入图片描述

例如:

from bokeh.io import show
from bokeh.models import CustomJS, Slider
 
slider = Slider(start=1, end=20, value=1, step=2, title="Slider")
 
slider.js_on_change("value", CustomJS(code="""
    console.log('slider: value=' + this.value, this.toString())
"""))
 
show(slider)

如下:
在这里插入图片描述

Plotly

Plotly是一个交互式可视化库,提供基于Web的图表,可以用于创建漂亮的图表和仪表板。

要安装Plotly,可以使用以下命令:

pip install plotly

基本

使用Plotly Express库中的scatter()方法绘制散点图。


import plotly.express as px
import pandas as pd
 
data = pd.read_csv("tips.csv")
 
fig = px.scatter(data, x="day", y="tip", color='sex')
 
# showing the plot
fig.show()

如下:
在这里插入图片描述
使用Plotly Express库中的line()方法绘制折线图。

import plotly.express as px
import pandas as pd
 

data = pd.read_csv("tips.csv")
 

fig = px.line(data, y='tip', color='sex')
 
fig.show()

如下:
在这里插入图片描述
使用Plotly Express库中的bar()方法绘制柱形图。

import plotly.express as px
import pandas as pd
 

data = pd.read_csv("tips.csv")
 

fig = px.bar(data, x='day', y='tip', color='sex')
 

fig.show()

如下:
在这里插入图片描述
使用Plotly Express库中的histogram()方法绘制直方图。


import plotly.express as px
import pandas as pd
 
# reading the database
data = pd.read_csv("tips.csv")
 
# plotting the scatter chart
fig = px.histogram(data, x='total_bill', color='sex')
 
# showing the plot
fig.show()

如下:
在这里插入图片描述

组合优化:定制化下拉菜单

在数据可视化中,展示图表不仅需要清晰的数据呈现,还需要用户友好的交互体验。本文将介绍如何通过使用 Plotly 中的 updatemenus 功能,为图表添加定制化下拉菜单,让用户能够灵活切换图表类型。

# 导入必要的库
import plotly.graph_objects as go
import pandas as pd

# 读取数据
data = pd.read_csv("tips.csv")

# 创建初始散点图
plot = go.Figure(data=[go.Scatter(
    x=data['day'],
    y=data['tip'],
    mode='markers',)
])

# 定义下拉菜单选项
menu_options = [
    dict(args=["type", "scatter"],
         label="散点图",
         method="restyle"),
    dict(args=["type", "bar"],
         label="柱状图",
         method="restyle")
]

# 添加下拉菜单
plot.update_layout(
    updatemenus=[
        dict(
            buttons=menu_options,
            direction="down",
        ),
    ]
)

# 展示图表
plot.show()

如下所示:
在这里插入图片描述
通过这个简单的示例,你可以在图表上方看到一个下拉菜单,用于在散点图和柱状图之间切换。这种交互方式使得用户能够更直观地探索数据。

同样地,我们可以应用相同的思想来优化时间序列数据的展示:

# 创建初始折线图
plot = go.Figure(data=[go.Scatter(
    y=data['tip'],
    mode='lines',)
])

# 定义时间序列下拉菜单选项
time_menu_options = [
    dict(count=1,
         step="day",
         stepmode="backward")
]

# 更新布局,添加时间序列下拉菜单
plot.update_layout(
    xaxis=dict(
        rangeselector=dict(
            buttons=time_menu_options
        ),
        rangeslider=dict(
            visible=True
        ),
    )
)

# 展示图表
plot.show()

如下:
在这里插入图片描述
这样,你就能够以更有层次感的方式呈现时间序列数据。

总结

通过本文学习,你不仅了解了如何使用 Python 中不同的绘图库(Matplotlib、Seaborn、Bokeh 和 Plotly)来展示提示数据集,还掌握了如何通过 Plotly 的交互功能为图表添加个性化的下拉菜单。每个绘图库都有其独特的优势,根据任务需求选择合适的库,既能提高效率又能提供更好的用户体验。希望你在数据可视化的旅程中能够更得心应手!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/201643.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深入了解Spring Boot中@Async注解的8大坑点

文章目录 1. 缺少EnableAsync注解2. 异步方法需独立3. 不同的异步方法间无法相互调用4. 返回值为void的异步方法无法捕获异常5. 外部无法直接调用带有Async注解的方法6. Async方法不适用于private方法7. 缺失异步线程池配置8. 异步方法与事务的兼容结语 🎉深入了解S…

基于SpringCloud的动漫论坛

基于SpringCloud的动漫论坛《BOKI》 摘要:鉴于现如今的互联网网站的存在形式,网站内部有可能内嵌论坛,因此,该项目中实现一个整体的、可移植性强的插件式论坛,论坛就有可能突破ACG主题的限制,实现论坛与主…

数据结构 -- 并查集与图

目录 1.并查集 1.结构 2.原理 3.代码实现 1.存储 2.寻找根节点 3.是否为同一集合 4.求集合个数 5.合并为同一集合中 整体代码 2.图 1.基本知识 1.各个属性 2.特殊名词 3.图的解释 2.图的表示 1.邻接矩阵 2.邻接表 3.图的遍历 1.BFS--广度优先遍历 2.DFS--…

LabVIEWL实现鸟巢等大型结构健康监测

LabVIEWL实现鸟巢等大型结构健康监测 管理国家地震防备和减灾的政府机构中国地震局(CEA)选择了七座新建的巨型结构作为结构健康监测(SHM)技术的测试台。这些标志性建筑包括北京2008年夏季奥运会场馆(包括北京国家体育场和北京国家游泳中心)、上海104层的…

Http协议(Hyper Text Transfer Protocol)

Http协议(Hyper Text Transfer Protocol) 这是一种超文本传输协议,规定了浏览器与服务器中间数据传输的规则 特点: 基于TCP协议:面向连接,安全基于请求-响应模型:一次请求对应一次响应http协议是无状态的协议&#…

通过网易的API完成一个简易的音乐播放器

效果图 工程环境 1、使用node在本地部署网易云音乐API接口 下载解压 链接:https://pan.baidu.com/s/1YQiMJoUMEYlMz14FH5xxRA?pwd36o5 提取码:36o5 工程目录概览 (js文件夹里面放了music.html和main.js和vue.js) 工程目录)(有点重复…

每日一题:LeetCode-103/107.二叉树的(层序/锯齿形层序)遍历

每日一题系列(day 04) 前言: 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 &#x1f50e…

微服务学习|初识elasticsearch、操作索引库、文档操作、RestClient操作索引库、RestClient操作文档

初识elasticsearch 什么是elasticsearch? elasticsearch是一款非常强大的开源搜索引擎,可以帮助我们从海量数据中快速找到需要的内容。 elasticsearch结合kibana、Logstash、Beats,也就是elastic stack (ELK)。被广泛应用在日志数据分析、实…

Oracle 11g安装过程

文章目录 前言1.下载安装包2.安装2.1本地安装文件2.2 安装过程 3.查看是否安装成功3.1 查看oracle是否安装成功3.2 查看oracle服务 前言 本文仅用于记录亲自安装oracle的过程 1.下载安装包 官网地址: Oracle Database 11g Release 2 (11.2.0.1.0) 注意&#xff…

函数的极值与最值

函数的最值 1.闭区间上连续函数的最值 1.求驻点或不可导点(可能的极值点) 2.求函数在驻点,不可导点,端点的函数值 3.比较大小 例题: 例题思想:分段函数分段点必须验证导数的存在性 几种常见的最值类型 1.…

不同类型的开源许可证

不同类型的开源许可证 什么是开源许可证 最简单的解释是,开源许可证是计算机软件和其他产品的许可证,允许在定义的条款和条件下使用、修改或共享源代码、蓝图或设计。开源并不意味着该软件可以根据需要使用、复制、修改和分发。根据开源许可证的类型&a…

群晖安装portainer

一、下载镜像 打开【Container Manager】 ,搜索portainer,双击【6053537/portainer-ce】下载汉化版本 二、创建映射文件夹 打开【File Station】,在docker目录下创建【portainer】文件夹 三、开启SSH 群晖 - 【控制面板】-【终端机和SNMP】 勾选【启动…

36.JavaScript补完计划:typescript

点赞收藏加关注,你也能住大别墅! 一、什么是typescript 二、应用场景 我认为JavaScript的特点就是在于它强大的延展性,不仅蔓延到了后端,而且也逐渐成为代码世界无法被忽视的存在。那么,编写js代码时我们都会经常遇到…

Echarts tooltip配置项的属性 图表悬浮框

这个小图标就是tooltip的配置项 tooltip:{} //默认样式 自定义显示数据 如果没有自定义的属性可以 只是写data [1254,1551,574,10]… series: {//图表配置项 如大小,图表类型name: 图表名字,type: bar,//图表类型data: [{value: 454,time: 2012-11-12},{value: 898…

easyrecovery 16数据恢复软件2024最新免费下载地址

EasyRecovery 16是一款操作简单、功能强大数据恢复软件,通过easyrecovery可以从硬盘、光盘、U盘、数码相机、手机等各种设备中恢复被删除或丢失的文件、图片、音频、视频等数据文件。 EasyRecovery Pro 16安装步骤 一、首先需要在该页找到下载地址处选任意地址将EasyRecovery软…

小间距LED屏幕需要解决的五大芯片问题

随着微距LED电子显示屏的像素间距逐渐缩小,对封装技术提出了更高的要求,LED灯珠和芯片尺寸也需要进一步减小。由此引发的显示性能、产品品质、一次性通过率、亮度和灰度等问题都需要通过先进芯片技术来解决。那么,什么是微距LED显示屏&#x…

JavaScript基础知识总结

1.前提 Html是一种标记语言,用来结构化我们的网页内容并赋予内容含义,例如定义段落、标题和数据表,或在页面中嵌入图片和视频 Css是一种样式规则语言,可将样式应用于 HTML 内容,例如设置背景颜色和字体,在多…

BUUCTF-pwn-ciscn_2019_ne_51

简单查看保护: 32为程序没有canary没有PIE,应该是简单的栈溢出。我们照着这个思路去找溢出点在哪,运行下程序看看什么情况: 程序上来是输入一个密码验证。随便输入下错误直接退出。因此我们需要到IDA中看看怎么回事: 主…

tcp/ip协议 error=10022 Winsock.reg Winsock2.reg

tcp/ip协议 error10022 这2个注册表选项千万不能删除,否则上不了网。 按下windows键R键,输入regedit,打开注册表,在文件目录里找到如下两个文件夹,删除这两个文件夹。 路径:HKEY_LOCAL_MACHINE\System\C…

微信小程序获取手机号上限,怎么处理比较省钱

微信新规 微信2023年改了规则,原本免费的小程序获取手机号,现在如果要获取要1分钱一条。 有些小程序的用户非常恐怖, 比如一些工具类的, 群发类的。如果进入小程序就必须要获取小程序,就像是无底洞,让运营…