【学习笔记】Python大数据处理与分析——Matplotlib数据可视化

news2024/10/6 20:34:22

一、绘图步骤

1、导入第三方库

import matplotlib.pyplot as plt
import numpy as np

2、准备数据

x1 = np.linspace(1, 10, 5)
y1 = np.sin(x1)

3、开始绘图

plt.plot(x1, y1, linewidth=3)

4、完善图表

plt.title("plot figure")
plt.xlabel("value of x")
plt.ylabel("value of y")

5、展示结果

plt.show()

        绘制图形如下:

二、经典图形绘制

1、折线图

        plot()函数的原型为plt.plot(x, y, format_string, **kwargs),参数分别为:

x:x轴数据(列表或函数,可选)

y:y轴数据(列表或函数,必选)

format_string:控制线条的格式字符串(定义线条的基本属性,如颜色、点型和线型,可选)

**kwargs:一系列可选关键字参数(如label指定线条标签,linewidth指定线条宽度,color指定线条颜色等)

plt.plot(x1, y1, color='red', marker='o', linestyle='dashed', linewidth=1, markersize=4, label="figure")
plt.title("first graph", fontsize=20)                    # 图表标题
plt.xlabel("value of X", fontsize=12)                    # x轴标签
plt.ylabel("value of Y", fontsize=12)                    # y轴标签
plt.tick_params(axis='both', labelsize=10)               # 刻度样式
plt.grid(ls=":", c="b")                                  # 网格线
plt.text(4, 0.1, "y=sin(x)", weight="bold", color="b")   # 注释文本
plt.legend(loc="lower left")                             # 图例
plt.show()

        绘制图形如下:

2、柱状图

        bar()函数的原型为matplotlib.pyplot.bar(x, height, width=0.8, bottom=0, align='center', data=None, **kwargs),参数分别为:

x:标量序列,标示在x轴上的定性数据类别,即每个柱状的x轴坐标

height:标量或标量序列,和x对应,确定每种定性数据类别的数量,即柱状的y轴高度

width:标量或数组形式序列,可选,决定单个柱状图的宽度,默认值为0.8

bottom:标量或数组等类似序列,设置y边界坐标轴起点,默认值为0

align:可选的两个值为{‘center’, ‘edge’},其默认值为center,使基准在x位置居中。

**kwargs:传递一系列的关键字参数,如color指定柱状图颜色(单一颜色为全部使用此颜色,而颜色列表会逐一染色),edgecolor指定柱状边缘的颜色;linewidth指定柱状的宽度,tick_label设置柱状图的刻度标签,默认为无标签,根据x的设置来显示,hatch设置条形的绘制风格,每种hatch字符代表填充的形状(/代表斜杆,*代表五角星,.代表点,o代表圆形......)

x2 = [1, 2, 3, 4, 5, 6]
y2 = [7, 5, 3, 9, 4, 6]

mpl.rcParams["font.sans-serif"] = "SimHei"    # 字体样式
mpl.rcParams["axes.unicode_minus"] = False    # 字符显示
mpl.rcParams["font.size"] = 12                # 字体大小
plt.bar(x2, y2, width=0.4, align="center", tick_label=["toy", "cup", "battery", "textbook", "computer", "phone"], color=['c', 'b', 'r'], hatch='/')
plt.xlabel("箱子类型")
plt.ylabel("箱子重量(kg)")
plt.title("货运箱重量统计", color="b")
plt.show()

        绘制图形如下:

3、直方图

        hist()函数的原型为plt.hist(x, bins=None, range=None, density=False, weights=None, cumulative=False, bottom=None, histtype='bar', align='mid', orientation='vertical', rwidth=None, log=False, color=None, label=None, stacked=False, normed=None, **kwargs),参数分别为:

x: 必需参数,用于绘制直方图的数据
bins: 可选参数,指定直方图的柱子数量或柱子的边界值。默认值为10
range: 可选参数,指定直方图的取值范围。默认值为数据的最小值和最大值
density: 可选参数,指定是否将直方图的高度归一化为概率密度。默认值为False
histtype: 可选参数,指定直方图的类型。可以是’bar’(默认值),‘barstacked’,‘step’,'stepfilled’等
color: 可选参数,指定直方图的颜色
label: 可选参数,指定直方图的标签,用于图例显示
align: 可选参数,指定柱子的对齐方式。可以是’left’,‘mid’(默认值),‘right’
orientation: 可选参数,指定直方图的方向。可以是’vertical’(默认值),‘horizontal’
rwidth: 可选参数,指定柱子的宽度,取值范围为[0, 1]。默认值为None,表示自适应宽度
**kwargs:传递其他关键字参数,用于进一步自定义直方图的样式和属性

x3 = [np.random.randint(0, 100, 40), np.random.randint(0, 100, 40)]
y3 = list(range(0, 101, 10))

mpl.rcParams["font.sans-serif"] = "SimHei"
mpl.rcParams["axes.unicode_minus"] = False
mpl.rcParams["font.size"] = 12

plt.hist(x3, bins=y3, color=['c', 'b'], histtype="bar", rwidth=1, alpha=0.6, edgecolor="black", label=['一班', '二班'])
plt.xlabel("测试成绩")
plt.ylabel("学生人数")
plt.title("学生英语考试分数统计", color="r")
plt.legend()
plt.show()

         绘制图形如下:

4、散点图

        scatter()函数的原型为matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, *, edgecolors=None, plotnonfinite=False, data=None, **kwargs),参数分别为:

x,y:输入点列的数组,长度都是size

s:点的直径数组,默认直径20,长度最大size

c:点的颜色,默认蓝色 'b',也可以是个 RGB 或 RGBA 二维行数组

marker:点的样式,默认小圆圈 'o'。

cmap:默认None,标量或者是一个colormap的名字,只有c是一个浮点数数组时才使用。如果没有申明就是 image.cmap

norm:默认None,数据亮度在0-1之间,只有c是一个浮点数的数组的时才使用

vmin,vmax:亮度设置,在norm参数存在时会忽略

alpha:透明度设置,0-1之间,默认None,即不透明

linewidths:标记点的长度

edgecolors:颜色或颜色序列,默认为 'face',可选值有 'face', 'none', None

plotnonfinite:布尔值,设置是否使用非限定的c(inf, -inf 或 nan) 绘制点

**kwargs:其他参数。

        以随机漫步过程为例:

from random import choice    # 补充

class RandomWalk:
    def __init__(self, point_num=50000):
        self.point_num = point_num
        self.xval = [0]
        self.yval = [0]

    def fill_walk(self):
        while len(self.xval) < self.point_num:
            # 计算x和y的漫步方向和步数
            x_direction = choice([1, -1])
            step_num = choice([0, 1, 2, 3, 4])
            xstep = x_direction * step_num
            y_direction = choice([1, -1])
            step_num = choice([0, 1, 2, 3, 4])
            ystep = y_direction * step_num
            # 如果原地踏步,则跳过此次循环
            if xstep == 0 and ystep == 0:
                continue
            # 计算下个点的坐标
            x_next = self.xval[-1] + xstep
            y_next = self.yval[-1] + ystep
            # 将该点坐标加入xval和yval两个列表
            self.xval.append(x_next)
            self.yval.append(y_next)


rw = RandomWalk()
rw.fill_walk()


fig, ax = plt.subplots()
point_numbers = list(range(rw.point_num))
# 按point_numbers列表指定的点序绘制渐变色散点
ax.scatter(rw.xval, rw.yval, c=point_numbers, edgecolors='none', s=2)
# 绘制起点和终点
ax.scatter(0, 0, c='green', edgecolors='none', s=2)
ax.scatter(rw.xval[-1], rw.yval[-1], c='red', edgecolors='none', s=2)
# 隐藏坐标轴
ax.axes.get_xaxis().set_visible(False)
ax.axes.get_yaxis().set_visible(False)
plt.show()

        绘制图形如下: 

5、等值(量)线图

(1)导入所需要的库

import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np

(2)数据准备

n = 128
x4 = np.linspace(-4, 4, n)
y4 = np.linspace(-4, 4, n)

(3)填充等高线颜色

def f(x, y):
    z = (1 - y ** 6 + x ** 6) * np.exp(-x ** 2 - y ** 2)
    return z


# 生成mesh网格状数据,用f()函数计算网格面上每点对应高度值,结合网格上每点二维坐标绘制等高线
x5, y5 = np.meshgrid(x4, y4)
z = f(x5, y5)

# 填充等高线
plt.contourf(x5, y5, z)

        此时的绘制情况如下:

        为显示热力图,需修改plt.contourf():

csf = plt.contourf(x5, y5, z, cmap=mpl.cm.hot)

        修改后的绘制情况如下:

(4)绘制等高线

# 绘制等高线
cs = plt.contour(x4, y4, z, 10, colors='black')
# 添加等高线文字标签
plt.clabel(cs, inline=True, fontsize=12)
# 添加图例
plt.colorbar(csf)

(5)输出等高线图 

plt.show()

        绘制图形如下:

6、地理信息可视化

(1)平面世界地图

# 设置投影方式
map1 = Basemap(projection='cyl')
# 背景上蓝色
map1.drawmapboundary(fill_color='aqua')
# 陆地上土黄色,江河湖泊上蓝色
map1.fillcontinents(color='coral', lake_color='aqua')
# 绘制图像
map1.drawcoastlines()
plt.show()

        绘制图形如下:

(2)球状世界地图

# 设置投影方式
map2 = Basemap(projection="ortho", lat_0=30, lon_0=120)
# 背景上蓝色
map2.drawmapboundary(fill_color="aqua")
# 陆地上土黄色,江河湖泊上蓝色
map2.fillcontinents(color="coral", lake_color="aqua")
# 绘制图像
map2.drawcoastlines()
plt.show()

        绘制图形如下:

 

三、图表调整及美化

        大致分为添加图例和标题,调整刻度格式、标签设置、内容和格式设置,添加网格线,绘制参考线,添加图表注释,向统计图形添加表格,颜色参数使用和颜色映射表使用,细节处可自行查询函数说明,示例代码如下:

# 设置字体
mpl.rcParams["font.sans-serif"] = "SimHei"
mpl.rcParams["axes.unicode_minus"] = False

# 数据准备
x6 = np.linspace(0.2, 3.0, 100)
y6 = np.sin(x6)
y6_ = np.random.randn(100)

# 绘图
plt.scatter(x6, y6_, c="green", label="散点图", edgecolors="none")
plt.plot(x6, y6, ls="--", c="red", lw=3, label="曲线图")
# 设置刻度范围
plt.xlim(0.0, 4.0)
plt.ylim(-4.0, 4.0)
# 设置坐标轴标签
plt.xlabel("X轴")
plt.ylabel("Y轴", rotation=360)
# 设置网格
plt.grid(True, ls=":", color="grey")
# 设置参考线
plt.axhline(y=0.0, c="r", ls="--", lw=2)
# 设置注释
plt.annotate("y=sin(x)", xy=(np.pi / 2, 1.0), xytext=(1.8, 2), color="r", fontsize=15, arrowprops=dict(arrowstyle="->", connectionstyle="arc3", color="r"))
plt.annotate("y,x轴", xy=(0.75, -4), xytext=(0.35, -2.7), color="b", fontsize=15, arrowprops=dict(arrowstyle="->", connectionstyle="arc3", color="b"))
plt.annotate("", xy=(0, -3.5), xytext=(0.3, -2.7), color="b", arrowprops=dict(arrowstyle="->", connectionstyle="arc3", color="b"))
plt.annotate("", xy=(3.5, 0.0), xytext=(3.4, -1.0), color="b", arrowprops=dict(arrowstyle="->", connectionstyle="arc3", color="b"))
plt.text(3.0, -1.3, "图表参考线", color="b", fontsize=15)
# 设置标题
plt.title("图标元素设置示例", color="m", fontsize=20)
# 设置图例
plt.legend(loc="upper right", fontsize=12)
# 显示图形
plt.show()

        绘制图形如下:

四、综合案例

import matplotlib.pyplot as plt
import matplotlib as mpl
from random import randint

mpl.rcParams["font.sans-serif"] = "Microsoft YaHei"
mpl.rcParams["axes.unicode_minus"] = False


# 骰子类
class Die:
    def __init__(self, num=6):
        self.num = num

    def roll_die(self):
        return randint(1, self.num)


die1 = Die()
die2 = Die()
results = []
count_nums = []
x7 = list(range(1, 13))

# 掷2000次,结果存入result列表
for roll_num in range(2000):
    result = die1.roll_die() + die2.roll_die()
    results.append(result)
# 统计每一面被掷到的次数
for value in range(1, die1.num + die2.num + 1):
    count_num = results.count(value)
    count_nums.append(count_num)

# 绘制图表
plt.bar(x7, count_nums, width=0.7, edgecolor="black", alpha=0.6, label="频数")
plt.xlabel("骰子点数和")
plt.ylabel("各点数之和出现的频数")
plt.title("两个骰子掷2000次", color="r")
plt.xticks(range(1, 13))
plt.grid(axis='y', ls=":", color="grey", alpha=0.5)
plt.legend()
plt.show()

        绘制图形如下:

 

 

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

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

相关文章

个人网站制作 Part 22 添加页面缓存 | Web开发项目添加页面缓存

文章目录 &#x1f469;‍&#x1f4bb; 基础Web开发练手项目系列&#xff1a;个人网站制作&#x1f680; 添加页面缓存&#x1f528;使用浏览器缓存&#x1f527;步骤 1: 设置响应头步骤 2: 使用ETag &#x1f528;使用 Vue.js&#x1f527;步骤 3: 使用keep-alive组件 &#…

运动耳机什么牌子的好用?最受欢迎的五款运动耳机品牌推荐

城市的喧嚣和繁忙&#xff0c;常常让我们渴望逃离&#xff0c;去寻找一片属于自己的宁静天地。大自然&#xff0c;便是那个能够抚慰我们心灵、让我们重新找回宁静与美好的地方。对于热爱自然、钟情户外的你&#xff0c;一款合适的运动耳机&#xff0c;无疑是探索自然、享受运动…

连连看游戏页面网站源码,直接使用

可以上传自己喜欢的图片 游戏页面 通关页面 源码免费下载地址抄笔记 (chaobiji.cn)

【C语言】每日一题,快速提升(4)!

&#x1f525;博客主页&#x1f525;&#xff1a;【 坊钰_CSDN博客 】 欢迎各位点赞&#x1f44d;评论✍收藏⭐ 题目&#xff1a;实现计算机程序 解答&#xff1a; 该程序运用函数指针数组&#xff0c;具体请看代码 代码&#xff1a; #include <stdio.h> int add(int a…

软考 - 系统架构设计师 - Web 应用真题(2)

问题 1&#xff1a; 淘汰策略&#xff1a;遗留系统技术含量低&#xff0c;业务价值也低&#xff0c;所以需要全面重新开发一个系统来替代遗留系&#xff1b;&#xff08;一般是企业的业务发生了根本变化&#xff0c;遗留系统已经基本不再适应企业运作的需要&#xff1b;或者是遗…

【Android AMS】startActivity流程分析

文章目录 AMSActivityStackstartActivity流程startActivityMayWaitstartActivityUncheckedLocked startActivityLocked(ActivityRecord r, boolean newTask, boolean doResume, boolean keepCurTransition)resumeTopActivityLocked 参考 AMS是个用于管理Activity和其它组件运行…

人类连接的桥梁:探索Facebook如何连接世界

随着技术的发展和全球化的进程&#xff0c;我们的世界正在变得越来越紧密相连。在这个过程中&#xff0c;社交媒体平台扮演了一个至关重要的角色&#xff0c;为人们提供了一个跨越国界、文化和语言的交流平台。其中&#xff0c;Facebook作为全球最大的社交媒体平台&#xff0c;…

Harbor安装手册

安装Docker yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager \ --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo sed -i -e /mirrors.cloud.aliyuncs.com/d -e /mirrors.aliyuncs.com/d \ /etc/yum.repos.d/…

error C2649: “typename”: 不是“class”的解决方法

目录 1.现象 2.解决方法 1.现象 我们定义了一个模版类&#xff0c;代码如下&#xff1a; template<typename X> class CShortWaveLinkProProtocol {friend class X;public:explicit CShortWaveLinkProProtocol() {}virtual ~CShortWaveLinkProProtocol() {}private:vo…

别让商业机密跑了:企业如何锁紧数据大门

Facebook 用户数据泄露&#xff1a;2018年&#xff0c;Cambridge Analytica公司非法获取了8700万Facebook用户的个人数据&#xff0c;并用于政治广告定向&#xff1b;Capital One 金融公司泄密&#xff1a;2019年&#xff0c;美国银行Capital One遭到黑客攻击&#xff0c;导致1…

Bridge 2024---创意无限,数字资产管理新纪元

Bridge 2024是Adobe公司开发的一款强大的视觉管理工具&#xff0c;专为创意工作者和摄影师设计。它提供了一个直观、高效的平台&#xff0c;用于组织、浏览、管理和展示图像、视频和音频文件。Bridge 2024具备全面的资源管理功能&#xff0c;用户可以轻松导入、组织、预览和搜索…

白盒测试之条件组合覆盖

白盒测试之条件组合覆盖&#xff08;蓝桥课学习笔记&#xff09; 实验介绍 使用分支-条件覆盖法设计白盒测试用例时可以使程序中所有判断语句中的条件取值为真、为假的情况和整个判断语句取真分支、假分支的情况都至少被执行过一次&#xff0c;但无法覆盖到所有路径&#xff…

c++-----继承

01&#xff1a;继承是什么 定义 继承 (inheritance) 机制是面向对象程序设计 使代码可以复用 的最重要的手段&#xff0c;它允许程序员在 保 持原有类特性的基础上进行扩展 &#xff0c;增加功能&#xff0c;这样产生新的类&#xff0c;称派生类。继承 呈现了面向对象 程序设计…

Java springboot使用EasyExcel读Excel文件,映射不到属性值,对象属性值都是null

如果你的类上有这个注解&#xff0c;去掉火或注释掉就可以了 Accessors(chain true)解决方法

常用日期组件封装

date.js // 获取近期日期数组 例&#xff1a;["2024-04-04 00:00:00", "2024-04-05 23:59:59"] const getDateRange (num 1) > {const time1 new Date()const diff new Date().getTime() - 86400000 * (num)const time2 new Date(diff)const year…

Canvas使用详细教学:从基础绘图到进阶动画再到实战(海报生成、Flappy Bird 小游戏等),掌握绘图与动画的秘诀

一、Canvas基础 1. Canvas简介 Canvas是HTML5引入的一种基于矢量图形的绘图技术&#xff0c;它是一个嵌入HTML文档中的矩形区域&#xff0c;允许开发者使用JavaScript直接操作其内容进行图形绘制。Canvas元素不包含任何内在的绘图能力&#xff0c;而是提供了一个空白的画布&a…

LLM-01 大模型 本地部署运行 ChatGLM2-6B-INT4(6GB) 简单上手 环境配置 单机单卡多卡 2070Super8GBx2 打怪升级!

写在前面 其他显卡环境也可以&#xff01;但是最少要有8GB的显存&#xff0c;不然很容易爆。 如果有多显卡的话&#xff0c;单机多卡也是很好的方案&#xff01;&#xff01;&#xff01; 背景介绍 目前借到一台算法组的服务器&#xff0c;我们可以查看一下目前显卡的情况 …

一篇出色的答辩状,需要在“答”与“辩”两方面下功夫,你做到了吗?

一篇出色的答辩状&#xff0c;需要在“答”与“辩”两方面下功夫&#xff0c;你做到了吗&#xff1f; 在法律诉讼中&#xff0c;答辩状的重要性不言而喻。它不仅是你回应对方指控的主要手段&#xff0c;也是展示你立场和观点的关键平台。在#李秘书讲写作#看来&#xff0c;一篇…

5.HC-05蓝牙模块

配置蓝牙模块 注意需要将蓝牙模块接5v,实测接3.3v好像不太好使的样子 首先需要把蓝牙模块通过TTL串口模块接到我们的电脑,然后打开我们的串口助手 注意,我们现在是配置蓝牙模块,所以需要进入AT模式,需要按着蓝牙模块上的黑色小按钮再上电,这时候模块上的LED灯以一秒慢闪一次…

Adobe AE(After Effects)2024下载地址及安装教程

Adobe After Effects是一款专业级别的视觉效果和动态图形处理软件&#xff0c;由Adobe Systems开发。它被广泛用于电影、电视节目、广告和其他多媒体项目的制作。 After Effects提供了强大的合成和特效功能&#xff0c;可以让用户创建出令人惊艳的动态图形和视觉效果。用户可以…