使用pandas制作图表

news2024/11/23 9:11:59

数据可视化对于数据分析的重要性不言而喻,一个优秀的图表有足以一眼就看出关键所在。pandas利用matplotlib实现绘图。能够提供各种各样的图表功能,包括:

  1. 单折线图
  2. 多折线图
  3. 柱状图
  4. 叠加柱状图
  5. 水平叠加柱状图
  6. 直方图
  7. 拆分直方图
  8. 箱型图
  9. 区域块图形
  10. 散点图
  11. 饼图
  12. 多子图
  13. 密度图
  14. 自由定制多子图

下面我们会依次讲解每一个图表的绘制,我们假设每一个代码文件里都引入了以下python包:

#!/usr/bin/env python
# -*-coding: UTF-8 -*-

import pandas as pd
import numpy as np
import MySQLdb
import random

import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
1. 单折线图

直接指定X轴、Y轴的值生成二维图表,np.arange返回的类型是numpy.ndarray。通过plt.title能够指定图表标题,plt.xlabel指定X轴名称,plt.ylable指定Y轴名称。

示例

x = np.arange(1, 12)
print(type(x))

y = x ** 2 + 4
print(type(y))

plt.title("Matplotlib demo")
plt.xlabel("时间(分钟)")
plt.ylabel("金额($)")
plt.plot(x,y)
plt.show()

输出
在这里插入图片描述

2. 多折线图

示例

js = '''
{
    "index":["2020-09-01","2020-09-02","2020-09-03","2020-09-04"],
    "columns":["首页PV","搜索页PV","注册数","下单用户数","订单数"],
    "data":[
            [1, 2, 3, 4, 5],
            [3, 7, 8, null, 10],
            [5, null, 13, 14, 15],
            [7, null, 18, 19, 20]
     ]
}
'''

pv_conv = pd.read_json(js, orient='split')
pv_conv.plot()
plt.show()

输出
在这里插入图片描述

3. 柱状图

示例

data = np.random.rand(10, 4)
df = pd.DataFrame(data, columns=['a', 'b', 'c', 'd'])
print(df)
df.plot.bar()

plt.show()

数据
在这里插入图片描述

输出
在这里插入图片描述

4. 叠加柱状图

示例

data = np.random.rand(10, 4)
df = pd.DataFrame(data, columns=['a', 'b', 'c', 'd'])
print(df)
df.plot.bar(stacked=True)

plt.show()

数据
在这里插入图片描述

输出
在这里插入图片描述

5. 水平叠加柱状图

示例

data = np.random.rand(10, 4)
df = pd.DataFrame(data, columns=['a', 'b', 'c', 'd'])
print(df)
df.plot.barh(stacked=True)

plt.show()

数据
在这里插入图片描述

输出
在这里插入图片描述

6. 直方图

示例

df = pd.DataFrame({'a': np.random.randn(1000) + 1, 'b': np.random.randn(1000), 'c': np.random.randn(1000) - 1}, columns=['a', 'b', 'c'])
print(df)
df.plot.hist(bins=20)
plt.show()

数据
在这里插入图片描述

输出
在这里插入图片描述

7. 拆分直方图

示例

df = pd.DataFrame({'a': np.random.randn(1000) + 1, 'b': np.random.randn(1000), 'c': np.random.randn(1000) - 1}, columns=['a', 'b', 'c'])
print(df)

df.hist(bins=20)

plt.show()

数据
在这里插入图片描述

输出
在这里插入图片描述

8. 箱型图

用于展示每列中值的分布

示例

df = pd.DataFrame(np.random.rand(10, 5), columns=['A', 'B', 'C', 'D', 'E'])
print(df)
df.plot.box()

plt.show()

数据
在这里插入图片描述

输出
在这里插入图片描述

9. 区域块图形

示例

df = pd.DataFrame(np.random.rand(10, 4), columns=['a', 'b', 'c', 'd'])
print(df)
df.plot.area()

plt.show()

数据
在这里插入图片描述

输出
在这里插入图片描述

10. 散点图

参数说明

# x: 散点的x坐标位置
# y: 散点的y坐标位置
# s: 散点的大小
# c: 散点颜色
# 更多参数查看: help(df.plot.scatter)

df.plot(kind='scatter', x='A', y='B', s=df.C*500, c='r')
plt.show()

示例

df = pd.DataFrame(np.random.rand(50, 4), columns=['a', 'b', 'c', 'd'])
print(df)
df.plot.scatter(x='a', y='b')

plt.show()

数据
在这里插入图片描述

输出
在这里插入图片描述

11. 饼图

示例

df = pd.DataFrame(3 * np.random.rand(4), index=['a', 'b', 'c', 'd'], columns=['x'])
print(df)
df.plot.pie(subplots=True)

plt.show()

数据
在这里插入图片描述

输出
在这里插入图片描述

12. 多子图

参数说明

  • subplots: 默认False, 如果想要每列单独绘图,改为True
  • layout: 画布划分多少块,(x,y)表示x行y列,块数要大于列数
  • figsize: 整个画布大小
  • sharey: 指定是否共享Y周范围

示例

df = pd.DataFrame(np.random.randn(4, 9), index=['a', 'b', 'c', 'd'], columns=np.arange(2, 11))
print(df)

# df.plot(subplots=True, layout=(3, 3), figsize=(10, 10), kind='bar')
df.plot(subplots=True, layout=(3, 3), figsize=(10, 10), kind='bar', sharey=True)

plt.show()

数据
在这里插入图片描述

输出
在这里插入图片描述

13. 密度图

类直方图,能够预测趋势

示例


import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import sys
import MySQLdb
import random

import matplotlib.pyplot as plt
import scipy

plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号

pv_conv = {
    '首页PV': [985, 211, 688, 766],
    '搜索页PV': [290, 200, 201, 228],
    '注册数': [98, 21, 19, 71],
    '下单用户数': [46, 43, 68, 72],
    '订单数': [40, 50, 70, 80],
}

df = pd.DataFrame(pv_conv)
print(df)

df['首页PV'].plot.density()

plt.show()

数据
在这里插入图片描述

输出
在这里插入图片描述

14. 自由定制多子图

示例

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

pd.set_option('display.max_columns', None)
pd.set_option('display.width', None)
plt.rcParams['font.sans-serif'] = ['SimHei']  # 显示中文标签
plt.rcParams['font.serif'] = ['KaiTi']
plt.rcParams['axes.unicode_minus'] = False

x = np.random.randn(100)
print(x)
fig, axes = plt.subplots(1, 4)
sns.kdeplot(x, ax=axes[0])
sns.kdeplot(x, ax=axes[1], cumulative=True)  # 累积分布
sns.kdeplot(x, ax=axes[2], shade=True)  # kde曲线下面的区域中进行阴影处理
sns.kdeplot(x, ax=axes[3], vertical=True)  # X轴进行绘制还是以Y轴进行绘制
plt.show()

输出
在这里插入图片描述

参考资料
  1. https://zhuanlan.zhihu.com/p/33977558

 
 
 

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

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

相关文章

网络和Linux网络_11(数据链路层)以太网(MAC帧)协议+局域网转发+ARP协议

目录 1. 以太网协议 1.1 MAC地址 1.2 以太网帧格式 2. 局域网转发原理 2.1 数据碰撞和交换机 2.2 最大传输单元MTU 3. ARP协议 3.1 ARP协议格式 3.2 模拟APR协议工作过程 3.3 ARP缓存表 4. 重看TCP/IP四层模型 本篇完。 1. 以太网(MAC帧)协议 网络层的IP协议并不是…

怎么下载抖音视频无水印?教你三个无水印下载抖音视频方法

怎么下载抖音视频无水印?抖音已经成为了我们日常生活与工作的无法割舍的一部分,每天数以亿计的用户在进行创作分享。在这个平台上,用户可以通过自己的所见所想进行创作和分享记录美好瞬间。然而,有些用户希望能够将自己喜欢的抖音…

PHP:解决一个字符串中的斜杠 / 进行 JSON 编码时,斜杠被转义为 \/

一、修改前 问题代码 直接通过JSON编码,就会出现问题 代码 $url SO/.$fileName; echo json_encode($url); 效果 二、解决后 代码 使用 json_encode 函数的第二个参数 JSON_UNESCAPED_SLASHES 来禁止对斜杠进行转义 $url SO/.$fileName; echo json_encode…

电力仪表在工厂车间设备电能管理系统的设计-安科瑞黄安南

摘 要:基于车间用电设备的电能管理系统架构思路及实施方法,从硬件和软件方面对此方法进行了阐述。对车间旧设备改造以及新的电能管理系统提供一种思路和便捷的方法。 关键词:电能管理系统;多功能电力仪表;PLC&#x…

【后端】JVM 远程调试

前言 再好的代码,也还是有瑕疵的,不是代码不给力,是线上问题太牛逼太玄幻。这不刚部署就出现了问题,幸好还是测试的时候,早点发现早点解决,不给任何人带来不必要的损失,是我做人的原则,只要钱到位,任何问题都不是问题。 JVM 远程调试 不得不说 IDEA 和 宝塔配合是真…

【FastApi】—— uvicorn启动程序出现端口冲突

文章目录 🍖 前言🎶一、问题描述✨二、更改方案🏀三、运行结果🏆四、知识点提示 🍖 前言 【FastApi】—— uvicorn启动程序出现端口冲突 🎶一、问题描述 描述: INFO: Will watch for changes …

Spring Cloud版本导致的java.lang.NoSuchFieldError: sharedInstance异常

目录 一、问题现象二、解决办法1、本次异常配置2、修改后的配置 三、原因分析 一、问题现象 2023-12-05 16:21:53.680]|[ INFO]|[80173]|[main]|[]|[]|[trationDelegate$BeanPostProcessorChecker:335]|[Bean org.springframework.cloud.client.loadbalancer.reactive.LoadBal…

css 3D背景反转实现

body{/* 透视 */perspective: 800px; } div{transform-style:preserve-3d;width:259px;height:396px;margin: 100px auto;position: relative; } div img{position: absolute;width:259px;height:396px;left:0;top:0;transition: all linear 2s;z-index: 0; } div img:nth-chil…

使用Python内置库实现数据的加密与校验

更多资料获取 📚 个人网站:ipengtao.com 数据的安全性是现代应用程序中不可忽视的一个重要方面。在Python中,我们可以利用内置的加密和校验库来保护敏感信息。本文将深入讨论如何使用Python内置库实现数据的加密和校验,为开发者提…

java实验:数据库应用(idea+mysql+php)设计用户注册和登录

设计用户注册和登录界面,实现用户注册和登录操作。 设计用户注册/登录界面;使用工具在MySQL中创建user表,包括学号、姓名、密码、专业、班级;实现注册操作:在user表中插入一条新纪录,但学号不能重复;实现登…

通用plantuml 时序图(Sequence Diagram)模板头

通用plantuml文件 startuml participant Admin order 0 #87CEFA // 参与者、顺序、颜色 participant Student order 1 #87CEFA participant Teacher order 2 #87CEFA participant TestPlayer order 3 #87CEFA participant Class order 4 #87CEFA participant Subject order …

群晖Docker搭建HomeAssistant,结合内网穿透实现远程访问智能家居控制中心

使用群晖Docker搭建HomeAssistant并实现异地公网访问 文章目录 使用群晖Docker搭建HomeAssistant并实现异地公网访问一、下载HomeAssistant镜像二、内网穿透HomeAssistant,实现异地控制智能家居三、使用固定域名访问HomeAssistant HomeAssistant是一个可以控制 苹果…

Redis部署-集群

目录 集群 数据分片算法 哈希求余 一致性哈希算法 哈希槽分区算法 redis集群搭建 1.创建目录和配置. 2.将上述redis节点.构建成集群 3.使用客户端连接集群 集群模式下的故障转移流程 1.故障判定 2.故障迁移 集群扩容 集群 广义上的集群,只要是多个机器,构成了分布…

HarmonyOS架构及关键技术整理

技术解析:鸿蒙系统的底层优势 鸿蒙系统采用了先进的微内核设计,这是一种全新的系统架构,能够更好地适应现代智能设备的多样性和互联性。微内核通过最小化系统的核心功能,提高了系统的安全性和可定制性。此外,鸿蒙系统…

Day51力扣打卡

打卡记录 Plus and Multiply(模拟) 链接 要满足 a x b ∗ y n a^x b * y n axb∗yn 的关系,可以枚举满足 b ∗ y n − a x b * y n - a ^ x b∗yn−ax 的可余条件。 t int(input()) for _ in range(t):n, a, b map(int, input().…

Demystifying DeFi MEV Activities in Flashbots Bundle

目录 笔记后续的研究方向摘要引言贡献 Demystifying DeFi MEV Activities in Flashbots Bundle CCS 2023 笔记 本文介绍了对 Flashbots 捆绑包中的去中心化金融 (DeFi) 矿工可提取价值 (MEV) 活动的研究。作者开发了ActLifter&am…

无效的源发行版:18

启动项目出现报错:无效的源发行版:18 大概率是项目的jdk版本不一致造成的 我的项目是Gradle构建,主要检查这几方面 ①Gradle配置的JVM ②build.gradle文件的java版本 sourceCompatibility : 编译Java文件的jdk版本,涉及到具体…

【WPF.NET开发】创建简单WPF应用

本文内容 先决条件什么是 WPF?配置 IDE创建项目设计用户界面 (UI)调试并测试应用程序 通过本文你将熟悉在使用 Visual Studio 开发应用程序时可使用的许多工具、对话框和设计器。 你将创建“Hello, World”应用程序、设计 UI、添加代码并调试错误。在此期间&#…

车联网架构设计(二)_消息缓存

在上一篇博客车联网架构设计(一)_消息平台的搭建-CSDN博客中,我介绍了车联网平台需要实现的一些功能,并介绍了如何用EMQXHAPROXY来搭建一个MQTT消息平台。车联网平台的应用需要消费车辆发布的消息,同时也会下发消息给车辆,以实现车…

【Hive】——数据仓库

1.1 数仓概念 数据仓库(data warehouse):是一个用于存储,分析,报告的数据系统 目的:是构建面向分析的集成化数据环境,分析结果为企业提供决策支持 特点: 数据仓库本身不产生任何数据…