python常见绘图及代码

 

一、引言

 

在数据驱动的时代,将数据转化为直观的图形对于理解数据、发现模式和传达信息至关重要。Python作为一种功能强大且广受欢迎的编程语言,拥有丰富的绘图库,能满足不同场景下的数据可视化需求。本文将深入探讨Python中常见的绘图程序,包括Matplotlib、Seaborn、Plotly和Bokeh,并提供详细的代码示例。

 

二、Matplotlib:基础绘图的基石

 

2.1 简单折线图

 

Matplotlib是Python中最常用的绘图库之一,其 pyplot 子库提供了类似MATLAB的绘图接口。绘制简单折线图的代码如下:

 

import matplotlib.pyplot as plt

import numpy as np

 

x = np.linspace(0, 10, 100)

y = np.sin(x)

 

plt.plot(x, y)

plt.xlabel('X轴')

plt.ylabel('Y轴')

plt.title('正弦函数')

plt.show()

 

 

在这段代码中, np.linspace(0, 10, 100) 生成了从0到10的100个等间距数据点, np.sin(x) 计算了这些点的正弦值。 plt.plot(x, y) 绘制折线图, plt.xlabel 、 plt.ylabel 和 plt.title 分别设置坐标轴标签和标题, plt.show() 显示图形。

 

2.2 散点图

 

绘制散点图只需将 plot 函数替换为 scatter 函数:

 

import matplotlib.pyplot as plt

import numpy as np

 

x = np.random.randn(100)

y = np.random.randn(100)

 

plt.scatter(x, y)

plt.xlabel('X值')

plt.ylabel('Y值')

plt.title('随机散点图')

plt.show()

 

 

这里 np.random.randn(100) 生成100个服从标准正态分布的随机数, plt.scatter(x, y) 将这些点绘制成散点图。

 

2.3 柱状图

 

绘制柱状图使用 bar 函数:

 

import matplotlib.pyplot as plt

import numpy as np

 

categories = ['A', 'B', 'C', 'D']

values = [25, 40, 15, 30]

 

plt.bar(categories, values)

plt.xlabel('类别')

plt.ylabel('数值')

plt.title('柱状图')

plt.show()

 

 

 categories 列表定义了柱状图的类别, values 列表定义了每个类别的数值, plt.bar(categories, values) 绘制柱状图。

 

三、Seaborn:统计绘图的利器

 

3.1 分布图

 

Seaborn建立在Matplotlib之上,提供了更高级的统计绘图功能。绘制单变量分布图可以使用 distplot 函数:

 

import seaborn as sns

import numpy as np

import matplotlib.pyplot as plt

 

data = np.random.randn(100)

sns.distplot(data)

plt.title('正态分布')

plt.show()

 

 

 np.random.randn(100) 生成100个标准正态分布随机数, sns.distplot(data) 绘制该数据的分布图,包括直方图和核密度估计曲线。

 

3.2 箱线图

 

绘制箱线图使用 boxplot 函数,可用于比较不同组数据的分布:

 

import seaborn as sns

import pandas as pd

import matplotlib.pyplot as plt

 

data = {

    '组A': np.random.randn(50),

    '组B': np.random.randn(50) + 1,

    '组C': np.random.randn(50) - 1

}

df = pd.DataFrame(data)

 

sns.boxplot(data = df)

plt.title('箱线图')

plt.show()

 

 

这里创建了一个包含三组数据的DataFrame, sns.boxplot(data = df) 绘制箱线图,展示每组数据的分布特征。

 

3.3 热力图

 

热力图常用于展示数据矩阵中数值的分布,使用 heatmap 函数:

 

import seaborn as sns

import numpy as np

import matplotlib.pyplot as plt

 

data = np.random.rand(5, 5)

sns.heatmap(data, annot = True, cmap='YlGnBu')

plt.title('热力图')

plt.show()

 

 

 np.random.rand(5, 5) 生成一个5x5的随机数矩阵, sns.heatmap(data, annot = True, cmap='YlGnBu') 绘制热力图, annot = True 表示在每个方格中显示数值, cmap='YlGnBu' 指定颜色映射。

 

四、Plotly:交互式绘图的先锋

 

4.1 交互式折线图

 

Plotly可以创建交互式的Web图形。绘制交互式折线图的代码如下:

 

import plotly.express as px

import numpy as np

 

x = np.linspace(0, 10, 100)

y = np.sin(x)

 

fig = px.line(x=x, y=y, title='交互式正弦函数')

fig.show()

 

 

 px.line(x=x, y=y, title='交互式正弦函数') 创建一个交互式折线图对象, fig.show() 在默认浏览器中显示图形,用户可以进行缩放、平移等交互操作。

 

4.2 交互式散点图

 

绘制交互式散点图:

 

import plotly.express as px

import numpy as np

 

x = np.random.randn(100)

y = np.random.randn(100)

 

fig = px.scatter(x=x, y=y, title='交互式散点图')

fig.show()

 

 

同样, px.scatter(x=x, y=y, title='交互式散点图') 创建交互式散点图,用户可通过交互探索数据。

 

4.3 3D 图形

 

Plotly绘制3D图形也很方便,例如绘制3D散点图:

 

import plotly.express as px

import numpy as np

 

x = np.random.randn(100)

y = np.random.randn(100)

z = np.random.randn(100)

 

fig = px.scatter_3d(x=x, y=y, z=z, title='3D 散点图')

fig.show()

 

 

 px.scatter_3d(x=x, y=y, z=z, title='3D 散点图') 创建一个3D散点图,能以三维视角展示数据关系。

 

五、Bokeh:Web 可视化的能手

 

5.1 简单折线图

 

Bokeh用于创建交互式Web可视化。绘制简单折线图:

 

from bokeh.plotting import figure, show

from bokeh.models import ColumnDataSource

import numpy as np

 

x = np.linspace(0, 10, 100)

y = np.sin(x)

source = ColumnDataSource(data=dict(x=x, y=y))

 

p = figure(title='正弦函数', x_axis_label='X', y_axis_label='Y')

p.line('x', 'y', source = source)

show(p)

 

 

这里使用 ColumnDataSource 来管理数据, figure 创建绘图对象, p.line('x', 'y', source = source) 绘制折线, show(p) 在浏览器中显示图形。

 

5.2 交互式柱状图

 

绘制交互式柱状图:

 

from bokeh.plotting import figure, show

from bokeh.models import ColumnDataSource

import numpy as np

 

categories = ['A', 'B', 'C', 'D']

values = [25, 40, 15, 30]

source = ColumnDataSource(data=dict(categories=categories, values=values))

 

p = figure(x_range=categories, title='柱状图', x_axis_label='类别', y_axis_label='数值')

p.vbar(x='categories', top='values', width=0.9, source = source)

show(p)

 

 

 p.vbar 绘制垂直柱状图,通过 ColumnDataSource 实现数据绑定,使图形具有交互性。

 

5.3 交互式地图

 

Bokeh还能绘制交互式地图,例如:

 

from bokeh.plotting import figure, show

from bokeh.models import GeoJSONDataSource, LinearColorMapper, ColorBar

from bokeh.palettes import Viridis6

import geopandas as gpd

 

# 读取地理数据

gdf = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))

gdf = gdf[gdf['continent'] == 'Europe']

geosource = GeoJSONDataSource(geojson = gdf.to_json())

 

# 颜色映射

color_mapper = LinearColorMapper(palette = Viridis6, low = gdf['pop_est'].min(), high = gdf['pop_est'].max())

 

p = figure(title='欧洲人口分布', plot_width = 800, plot_height = 500, toolbar_location = None, tools = '')

p.patches('xs', 'ys', source = geosource, fill_color = {'field' :'pop_est', 'transform' : color_mapper}, line_color = 'black', line_width = 0.25)

 

color_bar = ColorBar(color_mapper=color_mapper, label_standoff=8, location=(0,0))

p.add_layout(color_bar, 'right')

 

show(p)

 

 

此代码使用地理数据绘制欧洲人口分布的交互式地图,通过颜色映射展示人口估计值。

 

六、总结

 

Python的绘图库为数据可视化提供了丰富的选择。Matplotlib适合基础绘图,Seaborn专注于统计绘图,Plotly和Bokeh则擅长创建交互式Web图形。根据具体需求选择合适的库,能更有效地将数据转化为有价值的可视化信息。通过不断实践和探索这些库的功能,我们可以创建出更具表现力和洞察力的数据可视化作品,助力数据分析、科学研究和信息传达等多个领域的工作。

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

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

相关文章

68.基于SpringBoot + Vue实现的前后端分离-心灵治愈交流平台系统(项目 + 论文PPT)

项目介绍 本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论述心灵治愈交流平台的当前背景以及系统开发的目的,后续章节将严格按照软件开发流程,对系统进…

Linux(上):基本知识篇

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、Linux初识1 Linux简介2 Linux学习环境配置(1)安装Linux(2)FinalShell远程连接Linux服务器二、Linux基础命令1 Linux目录结构,根目录 /2 Linux命令基础(1)什么是命令、命令行?(2)…

Python中的可变对象与不可变对象;Python中的六大标准数据类型哪些属于可变对象,哪些属于不可变对象

Python中的可变对象与不可变对象;Python中的六大标准数据类型哪些属于可变对象,哪些属于不可变对象 Python中的可变对象与不可变对象一、Python的六大标准数据类型1. 数字类型 (Number)2. 字符串 (String)3. 列表 (List)4. 元组 (Tuple)5. 集合 (Set)6. …

VSCode Live Server 插件安装和使用

VSCode Live Server是一个由Ritwick Dey开发的Visual Studio Code扩展插件,它提供了一个带有实时重载功能的本地开发服务器。在VSCode中安装和使用Live Server插件进行实时预览和调试Web应用程序。这将大大提高前端开发效率,使网页设计和开发变得更为流畅…

Personal APP

1、Matlab 2023b https://www.bilibili.com/opus/887246540317392920 https://blog.csdn.net/qq_25719943/article/details/138096918 https://www.jokerdown.com/22886.html 2、Jlink使用技巧 J-Scope虚拟示波器功能 Jlink使用技巧之J-Scope虚拟示波器功能 - 知乎 (zhihu.…

【马来西亚理工大学主办,ACM出版】2025年大数据、通信技术与计算机应用国际学术会议(BDCTA 2025)

2025年大数据、通信技术与计算机应用国际学术会议(BDCTA 2025) 2025 International Conference on Big Data, Communication Technology and Computer Applications 2025年2月14-16日 | 马来西亚-吉隆坡 大会官网:更多详情【论文投稿】 主办单位&…

Sprint Boot教程之五十:Spring Boot JpaRepository 示例

Spring Boot JpaRepository 示例 Spring Boot建立在 Spring 之上,包含 Spring 的所有功能。由于其快速的生产就绪环境,使开发人员能够直接专注于逻辑,而不必费力配置和设置,因此如今它正成为开发人员的最爱。Spring Boot 是一个基…

超完整Docker学习记录,Docker常用命令详解

前言 关于国内拉取不到docker镜像的问题,可以利用Github Action将需要的镜像转存到阿里云私有仓库,然后再通过阿里云私有仓库去拉取就可以了。 参考项目地址:使用Github Action将国外的Docker镜像转存到阿里云私有仓库 一、Docker简介 Do…

左神算法基础巩固--3

文章目录 二叉树二叉树的遍历先序遍历中序遍历后序遍历 解答二叉树的宽度优先遍历 在这里插入图片描述 一颗完全二叉树具有以下特征:1.不存在任何一个节点具有右子树但不存在左子树.2.不存在任何一个节点在满足1的情况下左右子树不全且其后续节点不为叶子节点 根据以…

推动多语言语音科技迈向新高度:INTERSPEECH 2025 ML-SUPERB 2.0 挑战赛

随着语音技术在各领域应用的迅速扩展,全球语言与口音的多样性成为技术进一步突破的重大挑战。为了应对这一难题,来自卡内基梅隆大学(CMU)、斯坦福大学(Stanford University)、乔治梅森大学(George Mason Un…

IvorySQL 升级指南:从 3.x 到 4.0 的平滑过渡

日前,IvorySQL 4.0 重磅发布,全面支持 PostgreSQL 17,并且增强了对 Oracle 的兼容性。关于 IvorySQL 4.0 的介绍,各位小伙伴可以通过这篇文章回顾:IvorySQL 4.0 发布:全面支持 PostgreSQL 17. 在 IvorySQL…

flink的EventTime和Watermark

时间机制 Flink中的时间机制主要用在判断是否触发时间窗口window的计算。 在Flink中有三种时间概念:ProcessTime、IngestionTime、EventTime。 ProcessTime:是在数据抵达算子产生的时间(Flink默认使用ProcessTime) IngestionT…

Windows11环境下设置MySQL8字符集utf8mb4_unicode_ci

1.关闭MySQL8的服务CTRLshiftESC,找到MySQL关闭服务即可 2.找到配置文件路径(msi版本默认) C:\ProgramData\MySQL\MySQL Server 8.0 3.使用管理员权限编辑my.ini文件并保存 # Other default tuning values # MySQL Server Instance Config…

python学习笔记—14—函数

1. 函数 (1) len与my_len str "supercarrydoinb"def my_len(tmp_str):cnt 0for i in tmp_str:cnt 1return cntstr_len_1 len(str) str_len_2 my_len(str) print(f"len {str_len_1}") print(f"my_len {str_len_2}") (2) 函数传参数量不受…

Flink源码解析之:Flink on k8s 客户端提交任务源码分析

Flink on k8s 客户端提交任务源码分析 当我们需要在代码中提交Flink job到kubernetes上时,需要如何做呢?要引入什么第三方依赖?需要提供什么内容?flink是如何将job提交到k8s上的?经过了什么样的流程,内部有…

React Native 项目 Error: EMFILE: too many open files, watch

硬件:MacBook Pro (Retina, 13-inch, Mid 2014) OS版本:MacOS BigSur 11.7.10 (20G1427) 更新: 删除modules的方法会有反弹,最后还是手动安装了预编译版本的watchman。 React Native 项目运行npm run web,出现如下错误&#xff1a…

51单片机——定时器中断(重点)

STC89C5X含有3个定时器:定时器0、定时器1、定时器2 注意:51系列单片机一定有基本的2个定时器(定时器0和定时器1),但不全有3个中断,需要查看芯片手册,通常我们使用的是基本的2个定时器&#xff…

kubernetes第五天

1.Probe(探针)之readinessProbe就绪探针,可用性检查 readinessProbe此探针如果检查失败,pod会处于未就绪状态 1.exec方式检查 #通过rc资源创建了三个pod,然后使用services资源,对外提供三个pod的容器的访问入口。 ap…

优化提示词改善答疑机器人回答质量

1.通过优化提示词来调整大模型的回答 1.1使用场景 默认提示词无法满足业务要求。 回答的内容太简单/困难,输出内容/格式/语气达不到要求等 1.2llama-index 的提示词模版 1.2.1llama-index 的默认模板 from llama_index.llms.dashscope import DashScope from lla…

计算机网络 笔记 物理层

物理层的目的:主要为了实现相邻节点之间的数据的传输(01010....) 通信基础概念 信源:信号的发送方 信宿:信号的接收方 信道:信号的通道,通常一个物理的线路包含了两个:发送信道和接受信道 信号:数据的载体,有两种分别是 数字信号:离散的信号值 模拟信号:连续的信号值 马元…