Pandas数据可视化 - Matplotlib、Seaborn、Pandas Plot、Plotly

可视化工具介绍

让我们一起探讨Matplotlib、Seaborn、Pandas Plot和Plotly这四个数据可视化库的优缺点以及各自的适用场景。这有助于你根据不同的需求选择合适的工具。

1. Matplotlib

优点:

  • 功能强大:几乎可以用于绘制任何静态、动画和交互式图表。
  • 高度可定制:提供了细粒度的控制,可以精确调整图表的每个元素。
  • 广泛的社区支持:由于长时间存在和广泛使用,有大量的教程和资源。

缺点:

  • 学习曲线:初学者可能会觉得配置和语法复杂。
  • 样式:默认样式不如一些现代库吸引人,需要手动调整以达到现代美观的视觉效果。

适用场景:

  • 需要对图形进行精细控制的学术论文和专业报告。
  • 对图表外观有特定需求的项目。
2. Seaborn

优点:

  • 美观的默认设置:默认配置比Matplotlib更现代,更吸引人。
  • 简化创建复杂图表的接口:如分布图和矩阵图,适合进行统计数据可视化。
  • 良好的集成:与Pandas数据结构紧密集成,便于处理DataFrame。

缺点:

  • 定制能力有限:虽然比Matplotlib简单,但在高级定制性方面不如Matplotlib灵活。
  • 图表类型有限:主要专注于统计图表,其他类型的图表可能不支持。

适用场景:

  • 快速探索性数据分析。
  • 统计数据可视化,特别是需要展示数据分布和多变量关系的场景。
3. Pandas Plot

优点:

  • 易用性:直接在DataFrame和Series上调用.plot()进行绘图,极大简化了数据可视化的步骤。
  • 足够的图表类型:支持多种基础图表,满足基本分析需求。

缺点:

  • 功能有限:缺少高级图表和定制选项。
  • 依赖Matplotlib:继承了Matplotlib的一些限制,比如样式和交互性。

适用场景:

  • 快速数据探索和初步分析。
  • 需要从Pandas直接生成基本图表的场景。
4. Plotly

优点:

  • 交互性强:支持动态图表和交互操作,如缩放、平移和悬停提示。
  • 美观且现代:默认图表样式现代且具吸引力。
  • 支持Web集成:易于嵌入网页和应用程序。

缺点:

  • 性能:复杂图表在某些设备上可能响应较慢。
  • 学习曲线:功能丰富但需要时间学习如何有效使用。

适用场景:

  • 需要在网页或应用程序中嵌入交互式图表的场景。
  • 数据可视化产品或服务,用户交互是关键考量因素。

总结来说,选择哪个库取决于你的具体需求:Matplotlib适合需要高度定制的场景,Seaborn适用于快速且美观的统计图表展示,Pandas Plot最适合直接从数据框架快速绘图,而Plotly则是在需要强交互性和吸



Matplotlib

Matplotlib 是一个非常强大的Python绘图库,用于创建高质量的图表。它提供了丰富的模块和函数来制作图形和绘图。

常用方法和参数
  1. plt.plot(): 绘制线形图。

    • x, y: 输入数据。
    • color: 线条颜色。
    • label: 图例标签。
    • linewidth: 线条宽度。
    • linestyle: 线条样式。
  2. plt.scatter(): 绘制散点图。

    • x, y: 输入数据。
    • s: 点的大小。
    • color: 点的颜色。
    • marker: 点的形状。
  3. plt.bar(): 绘制条形图。

    • x, height: x 轴数据和高度。
    • width: 条的宽度。
    • color: 条的颜色。
    • label: 图例标签。
  4. plt.hist(): 绘制直方图。

    • x: 输入数据。
    • bins: 分组数量。
    • color: 颜色。
    • alpha: 透明度。
  5. plt.xlabel(), plt.ylabel(): 设置x轴和y轴的标签。

示例:线形图绘制
import matplotlib.pyplot as plt# 数据
x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]# 创建图形
plt.figure(figsize=(10, 5))
plt.plot(x, y, color='blue', linewidth=2, linestyle='-', marker='o', label='Data Line')
plt.xlabel('X Axis')
plt.ylabel('Y Axis')
plt.title('Simple Line Plot')
plt.legend()
plt.grid(True)
plt.show()
运行结果解释

这段代码会生成一个简单的线形图,其中x和y数据点用蓝色线条连接。每个数据点用圆形标记。图中还包含了x轴和y轴标签、标题、图例以及网格线。
在这里插入图片描述

常见问题及解决方案

  1. 问题: 图表中的文字重叠。

    • 解决方案: 使用plt.tight_layout()或调整plt.subplots_adjust()参数。
  2. 问题: 图例遮挡了图形的一部分。

    • 解决方案: 使用plt.legend(loc='best')自动找到最佳位置。
  3. 问题: 需要保存图表为图片文件。

    • 解决方案: 使用plt.savefig('filename.png')保存图表。
  4. 问题: 中文显示乱码。

    • 解决方案: 设置Matplotlib的字体参数,使用支持中文的字体。
  5. 问题: 图表的大小不合适。

    • 解决方案: 调整plt.figure(figsize=(width, height))中的尺寸参数。



Seaborn

Seaborn 是专门为统计图表设计的,提供了更多的图表类型和美化功能。它与Pandas数据结构紧密集成,使得数据探索更加方便。

常用方法和参数
  1. sns.lineplot(): 绘制线形图。

    • x, y: 输入数据。
    • hue: 用不同颜色表示不同类别。
    • style: 线条样式,根据分类变化。
    • markers: 每个点的标记。
  2. sns.scatterplot(): 绘制散点图。

    • x, y: 输入数据。
    • hue: 根据分类变化颜色。
    • style: 根据分类变化点的形状。
    • size: 点的大小。
  3. sns.barplot(): 绘制条形图。

    • x, y: 输入数据。
    • hue: 根据分类变化颜色。
    • palette: 颜色方案。
  4. sns.histplot(): 绘制直方图。

    • data: 输入数据。
    • bins: 分组数量。
    • kde: 是否显示核密度估计。
  5. sns.boxplot(): 绘制箱型图。

    • x, y: 输入数据。
    • hue: 根据分类变化颜色。
示例:多变量散点图
import seaborn as sns
import matplotlib.pyplot as plt# 数据
tips = sns.load_dataset('tips')# 创建图形
sns.scatterplot(data=tips, x="total_bill", y="tip", hue="time", style="time", size="size")
plt.title('Scatter Plot with Seaborn')
plt.show()
运行结果解释

这个示例中,我们使用Seaborn加载了内置的“tips”数据集,并创建了一个散点图,其中包含了不同时间段(午餐和晚餐)的总账单和小费信息。颜色和点的样式根据时间变化,点的大小表示桌子上的人数。
在这里插入图片描述

常见问题及解决方案

  1. 问题: Seaborn图形的样式与Matplotlib不一致。

    • 解决方案: 使用sns.set()来设置默认的图形样式,使其与Matplotlib协调。
  2. 问题: 图例太大或位置不合适。

    • 解决方案: 使用plt.legend(loc='upper right', bbox_to_anchor=(1, 1))调整图例位置和大小。
  3. 问题: 密度图显示不平滑。

    • 解决方案: 在sns.kdeplot()中增加bw_adjust参数来调整带宽。
  4. 问题: 柱状图中的柱子重叠。

    • 解决方案: 调整width参数来减少柱子的宽度。
  5. 问题: 要分别对比多个分类变量。

    • 解决方案: 使用sns.pairplot()绘制多变量分布。



现在我们来探讨 Pandas Plot,这是Pandas内置的绘图方法,建立在Matplotlib上。这个功能使得直接从DataFrame和Series数据结构进行图形绘制变得非常简便。

Pandas Plot

Pandas 的 .plot() 方法提供了一种快速绘图的方式,支持多种图表类型,非常适合于初步的数据分析。

常用方法和参数

.plot() 方法提供了多种绘图类型,通过 kind 参数来指定:

  1. kind='line': 绘制线形图。
  2. kind='scatter': 绘制散点图,需要指定 xy
  3. kind='bar'kind='barh': 分别绘制垂直和水平的条形图。
  4. kind='hist': 绘制直方图。
  5. kind='box': 绘制箱型图。
  6. kind='pie': 绘制饼图。

其他常用参数包括:

  • color: 设置颜色。
  • figsize: 图形的大小。
  • title: 图表的标题。
  • legend: 是否显示图例。
  • grid: 是否显示网格。
示例:条形图
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt# 数据
data = pd.DataFrame({'A': np.random.rand(5),'B': np.random.rand(5)
})
# 创建条形图
ax = data.plot(kind='bar', figsize=(10, 5), title="Bar Chart Example")
ax.set_xlabel("Index")
ax.set_ylabel("Value")
ax.legend(title="Legend")
plt.show()
运行结果解释

这段代码生成了一个包含两组数据(A和B)的条形图。每个索引的位置显示了A和B的值,颜色不同以区分两者。
在这里插入图片描述

常见问题及解决方案

  1. 问题: 想要在条形图上显示数值。

    • 解决方案: 在绘图之后,使用ax.text()方法在条形图的每个条上添加文本。
  2. 问题: 想要更改图例的位置。

    • 解决方案: 使用ax.legend(loc='upper right')来指定图例的位置。
  3. 问题: 需要调整轴的刻度标签的角度。

    • 解决方案: 使用plt.xticks(rotation=45)来旋转x轴标签。
  4. 问题: 想要改变图表的风格。

    • 解决方案: 使用plt.style.use('ggplot')来应用不同的样式。
  5. 问题: 图表保存为图片文件。

    • 解决方案: 使用plt.savefig('filename.png')保存图表。



Plotly

Plotly 支持多种图表类型,包括线形图、散点图、条形图、饼图、箱型图等,都可以交互式地操作,如缩放、平移和悬停提示等。

常用方法和参数
  1. px.line(): 创建线形图。

    • data_frame: 数据框架。
    • x, y: x和y轴的数据列。
    • color: 根据分类变化颜色。
    • title: 图表标题。
  2. px.scatter(): 创建散点图。

    • data_frame: 数据框架。
    • x, y: x和y轴的数据列。
    • color: 根据分类变化颜色。
    • size: 点的大小。
    • hover_data: 悬停时显示的额外数据。
  3. px.bar(): 创建条形图。

    • data_frame: 数据框架。
    • x, y: x和y轴的数据列。
    • color: 根据分类变化颜色。
    • title: 图表标题。
  4. px.histogram(): 创建直方图。

    • data_frame: 数据框架。
    • x: x轴的数据列。
    • nbins: 条的数量。
    • color: 颜色。
  5. px.box(): 创建箱型图。

    • data_frame: 数据框架。
    • y: y轴的数据列。
    • color: 根据分类变化颜色。
示例:散点图
import plotly.express as px# 数据
df = px.data.iris()# 创建散点图
fig = px.scatter(df, x="sepal_width", y="sepal_length", color="species", size="petal_length", hover_data=['petal_width'])
fig.update_layout(title='Iris Dataset Scatter Plot')
fig.show()
运行结果解释

这个示例使用了内置的Iris花卉数据集来创建一个散点图,其中x轴是花萼宽度,y轴是花萼长度。不同的花种用不同的颜色表示,花瓣长度决定了点的大小,悬停时可以看到花瓣宽度的信息。这个图表是交互式的,可以缩放和移动视图。
在这里插入图片描述

常见问题及解决方案

  1. 问题: 图表加载很慢。

    • 解决方案: 减少数据点的数量或优化数据处理步骤。
  2. 问题: 在网页中嵌入Plotly图表。

    • 解决方案: 使用Plotly的plotly.io.to_html()方法生成HTML代码,然后嵌入网页。
  3. 问题: 要调整图表的布局和样式。

    • 解决方案: 使用fig.update_layout()方法来自定义图表的各种布局属性。
  4. 问题: 想要保存图表为静态图片。

    • 解决方案: 使用fig.write_image('filename.png')保存图表。
  5. 问题: 如何创建动态更新的图表。

    • 解决方案: 使用Plotly Dash框架来创建可交互且动态更新的图表应用。



拓展

  • Bokeh: 专为网页设计的交互式图表库,Bokeh可以快速生成互动图表,非常适合用于构建复杂的可视化数据探索接口。
  • Altair: 一个声明式的统计可视化库,由Vega和Vega-Lite图表的基础上构建,Altair的API设计旨在创建清晰且可重复的图表。

更多问题咨询

Cos机器人

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习-- 爬虫IntelliScraper 重大更新说明

IntelliScraper 🕷️ 地址:IntelliScraper 介绍 🌟 IntelliScraper 是一个高级的Python网络抓取项目,专为精确解析HTML内容和特征匹配而设计,用于从特定网页提取关键信息。该项目利用了如BeautifulSoup和scikit-le…

用OpenCV先去除边框线,以提升OCR准确率

在OpenCV的魔力下,我们如魔法师般巧妙地抹去表格的边框线,让文字如诗如画地跃然纸上。 首先,我们挥动魔杖,将五彩斑斓的图像转化为单一的灰度世界,如同将一幅绚丽的油画化为水墨画,通过cv2.cvtColor()函数的…

寝室快修|基于SprinBoot+vue的贵工程寝室快修小程序(源码+数据库+文档)

贵工程寝室快修目录 目录 基于SprinBootvue的贵工程寝室快修小程序 一、前言 二、系统设计 三、系统功能设计 1学生信息管理 2 在线报修管理 3公告信息管理 4论坛信息管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&a…

结构方程模型【SEM】:非线性、非正态、交互作用及分类变量分析

张老师(研究员),长期从事R语言结构方程模型、群落生态学、保护生物学、景观生态学和生态模型方面的研究和教学工作,已发表了多篇论文,拥有丰富的科研及实践经验。 利用结构方程模型建模往往遇到很多‘特殊’情况&…

CDA一级备考策略分享

但对于很多考生来说,没有备考经验,不知道应该如何备考?今天,我来指导大家应该如何备考,让大家充分准备,拿下CDA考试。在CDA考试大纲中为新考生讲解备考经验一下。 1、数据分析概述与职业操守、数据结构 考…

Excel 批量创建sheet页

参考资料 最巧妙的Excel批量创建工作表方法 一. 需求 ⏹有如下模板,现想根据提供的姓名,批量创建sheet页,要求每个sheet页拥有相同的模板 二. 通过透视表,批量创建sheet页面 ⏹如下图所示的步骤,创建透视表后&#…

人工 VS AGV无人搬运机器人,AGV赋能中国智能制造

agv 机器人作为智能制造的重要抓手,正在渗透到各个传统行业,成为我国制造业转型升级的焦点。未来,智能AGV将不仅仅是简单的把货物搬运到指定的位置,而是要把5G技术、大数据、物联网、云计算等贯穿于产品的设计中,让智能…

《动手学深度学习(Pytorch版)》Task03:线性神经网络——4.29打卡

《动手学深度学习(Pytorch版)》Task03:线性神经网络 线性回归基本元素线性模型损失函数随机梯度下降 正态分布与平方损失 线性回归的从零开始实现读取数据集初始化模型参数定义模型定义损失函数定义优化算法训练 线性回归的简洁实现读取数据集…

帕累托森林李朝政博士受聘「天工开物开源基金会」专家顾问

导语: 开源铸造了当前最前沿的科技引擎。开源驱动了软件生态,也以指数级速度驱动硬件生态。 3月中旬,天工开物开源基金会授予李朝政博士专家顾问,表彰他积极推动参与中国智能软件生态的建设,期待一起共筑未来新生态。…

manim

当安装Manim时,首先需要安装Manim库本身,然后安装一些依赖库和工具,以确保Manim可以正常运行。以下是合并后的安装步骤: 安装Manim和依赖的步骤: 1. 安装Manim 首先,安装Manim库。你可以使用以下命令在终…

Java面试题:什么是Java中的CompletableFuture及其优势?有哪些性能提升

CompletableFuture是Java 8引入的一个类,用于简化异步编程模型。它是Future接口的一个增强版,提供了更加丰富和灵活的操作,使得编写异步、非阻塞的代码变得更加容易。CompletableFuture的主要优势和性能提升体现在以下几个方面: …

Python_AI库 Pandas的时间序列操作详解

Python_AI库 Pandas的时间序列操作详解 本文默认读者具备以下技能: 熟悉python基础知识,vscode或其它编辑工具 了解pandas,matplotlib的基础操作 具备自主扩展学习能力 在数据分析和处理中,时间序列数据是一类常见且重要的数据类型。大量的…

cannot import name ‘img_as_ubyte‘

前提: pip install scikit-image 已经成功安装,我的版本是0.22.0.但 from skimage.util import img_as_ubyte 报错,加个util即可 from skimage.util import img_as_ubyte API调用详见官网: 官网链接

CSS实现各种优惠券效果

一、左半圆效果 <style style"text/css">.coupon {width: 240px;height: 100px;margin-top: 15px;background-color: #ff6347;-webkit-mask: radial-gradient(circle at left center, transparent 20px, red 20px); } </style><div class"coupon…

TruLens

文章目录 一、关于 TruLensHow it works 二、安装三、快速使用Get DataInCreate Vector StoreBuild RAG from scratchSet up feedback functions.Construct the appRun the app 一、关于 TruLens Evaluate and Track LLM Applications 官网&#xff1a;https://www.trulens.o…

linux,从零安装mysql 8.0.30 ,并且更新至mysql 8.0.36

前言&#xff1a; 系统使用的CentOS 7&#xff0c;系统默认最小安装。 一、基础配置 配置虚拟机IP&#xff0c;需要更改的内容&#xff0c;如下红框中 修改之后 至此&#xff0c;基础配置完成。注意&#xff1a;此处虚拟机网络适配器使用的是&#xff1a;桥接模式 二、软件…

掌握Lazada自养号测评技巧,轻松提升产品销量与排名

Lazada店铺销量不佳&#xff0c;时常让卖家们感到困扰。然而&#xff0c;仅仅感叹和自我安慰并不能解决问题。作为卖家&#xff0c;我们需要专注于打牢基础&#xff0c;尤其是要深入了解Lazada店铺测评的益处及其运用技巧。通过巧妙地结合运营策略和测评方法&#xff0c;我们可…

Zephyr storage存储子系统系统学习记录

一、Zephyr storage 存储子系统能做什么&#xff1f; 统一管理磁盘操作方便应用层使用存储&#xff0c;如格式化、读数据、写数据。 二、应用层操作 官方给的demo&#xff1a; https://github.com/zephyrproject-rtos/zephyr/blob/main/samples/subsys/nvs/src/main.c 序号…

Android常用命名大全

Android系统又太多自定义或者自制的命名工具&#xff0c;有很多工具有必要且很有用&#xff0c;所以有想法来把一些常用且实用的命令一一罗列出来供日后快速翻阅使用。 1、查看apk版本号&#xff08;windows&#xff09; ~\AppData\Local\Android\sdk\build-tools\25.0.3\aap…

Android --- 英文单引号用apos;替换报错:does not contain a valid string resource

<string name"SSSS_09_08_06_RES_12">Remove owner&apos;s digital key</string>报错信息如下&#xff1a; string/SSSS_MM_09_08_06_RES_12 does not contain a valid string resource在开发的过程中需要使用英文的单引号&#xff0c;度娘说用“#a…