Python数据分析-matplotlib数据可视化

news2025/1/18 18:46:08

1.  初识Matplotlib

matplotlib是 Python 最流行的绘图工具之一,广泛用于数据可视化。

1.1基本图表绘制

图表名称表示函数
散点图plt.scatter(x, y)
柱状图plt.bar(x, height)
折线图plt.plot(x, y)
直方图plt.hist(x, bins)
箱线图plt.boxplot(x)
热力图plt.imshow(x)
填色图plt.fill_between(x, y1, y2)

1.2 图表元素: 

元素名称引用函数
标题:plt.title('Title')
X轴标签:plt.xlabel('X label')
Y轴标签:plt.ylabel('Y label')
图例:plt.legend()
网格线:plt.grid()
子图:plt.subplot(nrows, ncols, index)

1.3 定制图表:

装饰元素引用函数
线型、标记和颜色:plt.plot(x, y, linestyle, marker, color)
轴的范围:plt.xlim([start, end]) 和 plt.ylim([start, end])
轴的刻度:plt.xticks(ticks) 和 plt.yticks(ticks)
图例位置:plt.legend(loc='upper right')

1.4 数据可视化工具: 

numpy 和 pandas 集成:plt.plot(dataframe['column'])

2.认识Matplotlib基本函数

2.1 引用matplotlib

plt.rcParams 是一个字典,用于全局配置 matplotlib 的参数。

['font.family']='Fangsong':确保绘图时,所有出现的字体都为“仿宋”;

['axes.unicode_minus'] = False:确保在大多数情况下负号能够正确显示;

注:字体可在'设置-编辑器-字体'路径查看,找到系统中正确的字体名。

import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.family']='Fangsong'
plt.rcParams['axes.unicode_minus'] = False

2.2 创建绘图子集

2.2.1 设置图表画布

参数1:行数、参数2:列数;

返回值fig,表示当前画布;

返回值axs,表示设置数据引用。

fig,axs = plt.subplots(2,1)
2.2.2 分别在下标值为0或1的窗口中绘制柱形图:

[0]是指第一个格子

hist() 函数用于绘制数据的直方图;

plot() 函数用于绘制线图。

axs[0].hist(data,bins=50,color='blue')
axs[1].plot(data,color='red')
2.2.3 参数设置-设置标题
axs[0].set_title('数据分布')
axs[1].set_title('随机样本')
axs[0].set_xlabel('值')
axs[0].set_ylabel('频率')
2.2.4 布局输出
fig.tight_layout()#自动布局
plt.show()

3.关联图

3.1 随机绘制一个散点图

#散点图
x=np.random.randn(100)
y=np.random.randn(100)
#绘制散点图函数
#参数marker='*',设置窗口中图像样式
plt.scatter(x=x,y=y,color='red',marker='*')
#设置xy轴范围
plt.xlim(0,2)
plt.ylim(0.5,2)
#显示网络
plt.grid()

3.2 导入数据绘制散点图

3.2.1 导入文件

data = pd.read_excel('order2019.xlsx')
# print(data.head())
# print(data.describe())
#获得商品
types = data['goodsID'].unique().tolist()
# print(types)
#存放商品均价的列表
prices = []
#存放商品数量的列表
amounts = []
for t in types:
    #依次获得每一个商品的均价
    price = data[data['goodsID']==t]['orderAmount'].mean()
    prices.append(price)
    #依次获得每一个商品的数量
    amount = len(data[data['goodsID']==t])
    amounts.append(amount)
print(prices)
print(amounts)

3.2.2 绘制散点图

plt.scatter(x=prices, y=amounts,color='green',marker='*')
plt.title('goods prices vs amounts')
plt.xlabel('price')
plt.ylabel('amount')
plt.xlim(600,1500)
plt.ylim(50,150)
plt.grid()
plt.show()

3.2.3 利用散点图对三个商品进行分析

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
#导入文件a
data = pd.read_excel('order2019.xlsx')
#获得商品
types = data['goodsID'].unique().tolist()
prices = []
amounts = []
for t in ['PR000064','PR000582','PR000302']:
    price = data[data['goodsID']==t]['orderAmount'].mean()
    prices.append(price)
    amount = len(data[data['goodsID']==t])
    amounts.append(amount)
plt.scatter(x=prices[0], y=amounts[0], color='red', marker='*')
plt.scatter(x=prices[1], y=amounts[1], color='blue', marker='*')
plt.scatter(x=prices[2], y=amounts[2], color='green', marker='*')
plt.title('goods prices vs amounts')
plt.xlabel('price')
plt.ylabel('amount')
plt.grid()
plt.show()

3.3 热力图绘制

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
plt.rcParams['font.family']='Fangsong'
plt.rcParams['axes.unicode_minus'] = False
data = pd.read_excel('order2019.xlsx')

factories = ['fac1','fac2','fac3','fac4','fac5']
quanlity = ['bad','poor','general','good','great']
result = np.round(np.random.random(25).reshape(5,5),1)
print(result)
fig,ax = plt.subplots(1,1)#chuangkou:jiegou/zhi
plt.imshow(result)

#循环 为每一个格子赋值
for i in np.arange(len(factories)):
    for j in np.arange(len(quanlity)):
        plt.text(j, i, result[i][j], color='w', va='center', ha='center')

#设置坐标轴的类别
ax.set_yticks(np.arange(len(quanlity)))#设置x轴取值范围
ax.set_xticks(np.arange(len(factories)))#设置y轴取值范围
ax.set_yticklabels(quanlity)#设置x轴文本
ax.set_xticklabels(factories)#设置y轴文本
ax.set_title('goods quanlity or factories')

fig.tight_layout()
plt.show()

4.变化图

4.1 绘制折线图

samplel = np.random.random(100)
plt.plot(samplel)

4.2 绘制面积图

plt.fill_between(np.arange(100),y1=samplel,y2=0,alpha=0.5)

5.分组图

1.散点分布图

以a_x为例:

  • 生成一个包含100个随机浮点数的数组,这些浮点数在[0, 1)区间内均匀分布。
  • 加上1后,这些值被平移至[1, 2)区间。
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

a_x = np.random.random(100)+1
a_y = np.random.random(100)+1.5
b_x = np.random.random(200)+2.1
b_y = np.random.random(200)+1.7

plt.scatter(a_x, a_y)
plt.scatter(b_x, b_y)
plt.show()

输出结果:

 2.条形分布图

x1 = [1,2,3,4]
x2 = [1.5,2.5,3.5,4.5]
y1 = [1,2,3,4]
y2 = [2,3,4,1]
plt.bar(x1,y1,width=0.2)
plt.bar(x2,y2,width=0.2)
plt.show()

3.应用范例

#获取源数据渠道列'ChanelID'的数据,取唯一值,转换成列表,获取前三个数据
chanel = data['chanelID'].unique().tolist()[:3]
#根据渠道的ID值获取对应的数据
df2 = data[(data['chanelID']==chanel[0])|(data['chanelID']==chanel[1])|(data['chanelID']==chanel[2])]
# print(df2)
#检索列
df2 = df2[['chanelID', 'platfromType', 'payment']]
#对数据进行分组
#根据渠道ID进行分组后,再根据支付方式分组
res = df2.groupby(['chanelID', 'platfromType']).sum()
print(res)
# print(df2)

fig,ax = plt.subplots()
labels1 = res.loc[chanel[0],:].index.tolist()
labels2 = res.loc[chanel[1],:].index.tolist()
labels3 = res.loc[chanel[2],:].index.tolist()
print(labels1)
#绘制分组柱状图,参数1起始位置;参数2:值;参数3:间距
plt.bar(np.arange(len(labels1))+1,res.loc[chanel[0],'payment'].tolist(),width=0.2)

print(np.arange(len(labels1))+1)
print(res.loc[chanel[0],'payment'].tolist())
# plt.show()
#x轴的类别显示
ax.set_xticks(np.arange(len(labels1)))
ax.set_xticklabels(labels=labels1,rotation=45)
plt.show()

6.偏差图

1.引用渠道、支付金额

res = data[['chanelID','payment']].groupby('chanelID').sum()

2.发散型条形图

交易额进行排序

plt.hlines(y=['a','b','c'],
           xmin=0,xmax=[-1,2,0.5],
           colors=['r','g','b'])
plt.show()

3.列表条形图

res = res.sort_values('payment',ascending=True)#降序
res['colors'] = ['red' if x>10000000 else 'green' for x in res['payment']]
plt.hlines(y=res.index,
           xmin=0,xmax=res['payment'],
           colors=res['colors'])
plt.grid(linestyle='--',alpha=0.5)
plt.show()

4.面积图

交易额的差值:

where=res['error'>0]条件匹配

facecolor='green'满足条件赋予色值

interpolate=True支持在参数列表中使用where表达式

alpha=0.5透明度0.5,不透明即为1

res['error']=res['payment'] - res['payment'].mean()
res = res.sort_values('chanelID')
plt.plot(res['error'])
plt.fill_between(res.index,res['error'],0,
                 where=res['error']>0,facecolor='green',
                 interpolate=True,alpha=0.5)
plt.fill_between(res.index,res['error'],0,
                 where=res['error']<0,facecolor='red',
                 interpolate=True,alpha=0.5)
plt.xticks(rotation=45)
plt.show()

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

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

相关文章

使用python从头开始预训练RoBERTa模型

本文将介绍如何使用Hugging Face库从头开始构建一个预训练Transformer模型。该模型称为 KantaiBERT。 #title Step 1: Loading the Dataset #1.Load kant.txt using the Colab file manager #2.Downloading the file from GitHubant !curl -L https://raw.githubusercontent.c…

Linux学习第一天

目录 1.引入 计算机的组成&#xff08;图解&#xff09; 操作系统是什么 操作系统的功能 操作系统的组成&#xff08;图解&#xff09; 操作系统内核的功能 常见的操作系统 2.Libux的学习 Linux的特点 Linux应用领域 搭建Linux学习环境 下载 创建虚拟机 新建虚拟机…

短视频矩阵开发,抖音新机遇(技术开发框架解析)

开发前言&#xff1a; 抖音短视频矩阵系统技术开发框架主要利用了VUE&#xff0c; Spring Boot、Django等技术。本技术文档适用于短视频矩阵源码的开发和部署。 #短视频矩阵源码开发部署 #抖音矩阵源码开发 #抖音矩阵源码 #抖音矩阵开发 抖音短视频矩阵系统的技术开发框架可以…

P1320压缩技术(续集版

P1320压缩技术&#xff08;续集版 感觉这题还是蛮难的对我来说&#xff0c;通过这题我才知道原来字符串输入不碰到空格就会一起输进来 我参考了一写题解自己又写了自己的解法&#xff0c;vs中的scanf_s和scanf()用法不太一样&#xff0c;之前按scanf写法写一直在报错&#xff…

彻底掌握Android中的Lifecycle

彻底掌握Android中的Lifecycle Lifecycle 是一个生命周期感知型组件&#xff0c;属于 Jetpack 组件库中的一部分&#xff0c;其核心功能是将组件&#xff08;如Activity 和 Fragment&#xff09;的生命周期状态通知给观察者&#xff08;LifecycleObserver&#xff09;。观察者…

指针 + 数组 较为复杂凌乱的 【笔试题】

2024 - 10 - 10 - 笔记 - 25 作者(Author): 郑龙浩 / 仟濹(CSDN 账号名) 【指针 数组】的 各种题型(笔试题) 来自于鹏哥的网课&#xff0c;我做一下笔记 119. 【C语言进阶】笔试题详解&#xff08;4&#xff09;_哔哩哔哩_bilibili ① 题 #include <stdio.h> int m…

VUE 开发——Vue学习(三)—— 智慧商城项目

目录 解释各个模块 api接口模块&#xff1a;发送ajax请求的接口模块utils工具模块&#xff1a;自己封装的一些工具方法模块components组件模块&#xff1a;全局通用的组件router路由模块&#xff1a;封装要所有路由views&#xff1a;各个页面assets&#xff1a;各种资源 van…

JAVA软开-面试经典题(7)-字符串常量池

字符串常量池 1.定义&#xff1a;字符串常量池&#xff08;String Constant Pool&#xff09;&#xff0c;用于存放字符串常量的运行时内存结构&#xff0c;其底层的实现为Hashtable。 【注意】 在JDK1.6之前&#xff0c;字符串常量池中只会存放具体的String实例&#xff0c;在…

MySQL基础探秘(3)

前面那篇文章是简单介绍了往数据库中插入数据&#xff0c;以及对数据进行有些改动。 但是&#xff0c;细想下&#xff0c;数据能够无限制&#xff0c;无约束进行插入吗&#xff1f; emm……显然是不行的&#xff0c;不然数据就乱套了&#xff0c;看起来不美观。 所以要对数据…

Axure详细介绍及功能对比,常用版本选择和替代软件分享

Axure是一款专门用于原型设计和交互设计的专业软件&#xff0c;广泛应用于用户界面&#xff08;UI&#xff09;和用户体验&#xff08;UX&#xff09;设计领域。它的主要功能是帮助产品经理、设计师以及开发人员创建具有互动性的原型&#xff0c;以便展示和测试各种应用、网站或…

CST学习笔记(二)Floquet模式激励设置

CST学习笔记&#xff08;二&#xff09;Floquet模式激励设置 在CST中我们常常使用Floquet模式来仿真频率选择表面(FSS)或者超材料等&#xff0c;但是我们设置好Zmax的floquet模式数量后&#xff0c;启动仿真&#xff0c;会发现S参数一栏中有很多我们不想要看的S参数&#xff0…

海南聚广众达电子商务咨询有限公司解锁流量密码

在这个瞬息万变的数字时代&#xff0c;电商行业如同一股不可阻挡的洪流&#xff0c;正以前所未有的速度重塑着商业版图。而在这股浪潮中&#xff0c;抖音电商以其独特的魅力&#xff0c;迅速崛起为一颗璀璨的新星&#xff0c;吸引了无数商家与创业者的目光。海南聚广众达电子商…

【题解】【动态规划01背包问题】—— [NOIP2012 普及组] 摆花

【题解】【动态规划01背包问题】—— [NOIP2012 普及组] 摆花 [NOIP2012 普及组] 摆花题目描述输入格式输出格式输入输出样例输入 #1输出 #1 提示 解法1.二维 d p dp dp1.1.思路解析1.2.AC代码 解法2.一维 d p dp dp2.1.思路解析2.2.AC代码 3.扩展:前缀和优化 [NOIP2012 普及组…

python基础知识(十一)面向过程,面向对象,对象属性,魔法方法,继承,私有权限

目录 面向过程是什么 什么是面向对象&#xff1f; 面向对象的三大特性&#xff1a; 继承 多态 类 对象 self关键字 对象属性 类外面访问属性 类内部获取属性 魔法方法 无参init()方法 有参init()方法 str()方法 del()方法 继承基础 什么是继承 单继承 多继…

Javascript笔试题目(六)

1.如何使用JS实现Promise 对象?请写出具体代码 Promise其实也不难-CSDN博客 Javascript 手写一个Promise_javascript中手写promise ?-CSDN博客 Promise其实也不难-CSDN博客 题目要求我们使用JavaScript实现一个Promise对象。对此我们可以基于Promise/A规范的要求进行实现Prom…

面试-2024年7月16号

面试-2024年7月16号 自我介绍Mysql主从复制是做了一个什么样的集群&#xff1f;在Mysql的使用过程中遇到过哪些问题&#xff1f;mysql迁移具体步骤mysql漏洞修复是怎么做的。mysql的容灾方案&#xff08;灾备恢复机制&#xff09;。redis多节点怎么部署的redis的备份与恢复、迁…

电源中的“冷地”和“热地”

最近硬件同事在弄开关电源相关项目&#xff0c;由于其第一次做开关电源&#xff0c;并不懂冷地和热地的区别&#xff0c;出现示波器探头接地夹夹“热地”导致实验室多次跳闸&#xff0c;最严重时把板子给炸了。为了了解冷地和热地的如何辨别以及为什么热地带电这些知识&#xf…

【从零开发Mybatis】引入XNode和XPathParser

引言 在上文&#xff0c;我们发现直接使用 DOM库去解析XML 配置文件&#xff0c;非常复杂&#xff0c;也很不方便&#xff0c;需要编写大量的重复代码来处理 XML 文件的读取和解析&#xff0c;代码可读性以及可维护性相当差&#xff0c;使用起来非常不灵活。 因此&#xff0c…

JavaEE 多线程第二节 (多线程的简单实现Thread/Runable)

1. 创建线程&#xff08;继承 Thread 类&#xff09;步骤&#xff1a; 继承 Thread 类&#xff1a; 创建一个类并继承 Thread 类&#xff0c;然后重写 run() 方法&#xff0c;在该方法中写入线程执行的代码 class MyThread extends Thread {Overridepublic void run()…

数据恢复超简单!9 个方法任你选!小白也能轻易恢复数据!

在当今数字化的世界中&#xff0c;数据恢复的重要性日益凸显。无论是工作中的重要文档&#xff0c;还是生活中的珍贵照片和视频&#xff0c;一旦丢失&#xff0c;都可能给我们带来极大的困扰。别担心&#xff0c;下面为大家介绍 9 个超简单的数据恢复方法&#xff0c;让小白也能…