【数据可视化01】matplotlib实例介绍1

目录

  • 一、引言
  • 二、实例介绍
      • 1.柱状图
        • 1)简单柱状图
        • 2)堆叠柱状图
      • 2.线条形式
      • 3.折线图(多子图)
      • 4.散点图
      • 5.水平和垂直线条
      • 6.饼状图
        • 1)饼状图
        • 2)“条形饼”图

一、引言

  matplotlib是一个用于绘制数据可视化的Python库。它可以创建各种静态、动态、交互式的图形,用于展示数据的分布、关系、趋势等。matplotlib提供了简单且灵活的API,使得用户能够轻松地根据自己的需求创建各种类型的图表。
  matplotlib提供了多种绘图风格和图表类型,包括线图、散点图、柱状图、饼图、等高线图等。用户可以通过简单的命令来设置图表的标题、轴标签、图例等,还可以调整图表的大小、颜色、线型等。matplotlib还支持绘制3D图表和地图,并提供了丰富的图表样式和色彩主题。
  matplotlib还与其他Python库紧密集成,如NumPy、pandas和scipy等,使得用户可以方便地在数据分析和科学计算的上下文中使用matplotlib绘制图表。此外,matplotlib还具有良好的文档和社区支持,用户可以轻松地找到大量示例代码和解决方案。
  总之,matplotlib是一个功能强大、易于使用且高度可定制的数据可视化库,适用于各种数据分析和科学计算任务。无论是初学者还是专业人士,都可以借助matplotlib轻松地将数据可视化,从而更好地理解和传达数据。

在这里插入图片描述

二、实例介绍

  在matplotlib中,常用的图形类型包括:

  1. 折线图(Line plot):用于展示数据随时间或其他连续变量发生变化的趋势。
  2. 散点图(Scatter plot):用于展示两个变量之间的关系,每个数据点用一个点表示。
  3. 柱状图(Bar plot):用于展示类别型变量的频次或总数之间的比较。
  4. 直方图(Histogram):用于展示连续变量的分布情况,将数据分成若干个区间,并计算每个区间中的数据个数或百分比。
  5. 饼图(Pie chart):用于展示类别型变量的占比情况,每个类别用扇形的面积表示。
  6. 箱线图(Box plot):用于展示连续变量的分布情况、异常值和离群点。
  7. 热力图(Heatmap):用于展示两个类别型变量之间的关系,通过颜色深浅来表示不同数值的大小。
  8. 3D图(3D plot):用于展示三维数据的分布情况,可以通过不同颜色或形状来表示不同数值或类别。
  9. 框图(Bar chart):用于展示类别型变量的数量或总数之间的比较,类似于柱状图,但可以包含多个类别变量的比较。

  以上只是常用的一些图形类型,matplotlib还提供了更多的图形类型和样式选择,可以根据具体需求选择合适的图形。下面介绍集中常用的图形绘制方法。

1.柱状图

1)简单柱状图

  这个示例展示了如何使用柱状图的颜色和标签参数来控制柱状图的颜色和图例条目。注意,前面带有下划线的标签不会显示在图例中。

import matplotlib.pyplot as plt
fig, ax = plt.subplots()
fruits = ['apple', 'blueberry', 'cherry', 'orange']
counts = [40, 100, 30, 55]
bar_labels = ['red', 'blue', '_red', 'orange']
bar_colors = ['tab:red', 'tab:blue', 'tab:red', 'tab:orange']
ax.bar(fruits, counts, label=bar_labels, color=bar_colors)
ax.set_ylabel('fruit supply')
ax.set_title('Fruit supply by kind and color')
ax.legend(title='Fruit color')
plt.show()

在这里插入图片描述

2)堆叠柱状图

  这是一个使用柱状图创建堆叠条形图的示例。

import matplotlib.pyplot as plt
import numpy as np# data from https://allisonhorst.github.io/palmerpenguins/species = ("Adelie\n $\\mu=$3700.66g","Chinstrap\n $\\mu=$3733.09g","Gentoo\n $\\mu=5076.02g$",
)
weight_counts = {"Below": np.array([70, 31, 58]),"Above": np.array([82, 37, 66]),
}
width = 0.5fig, ax = plt.subplots()
bottom = np.zeros(3)for boolean, weight_count in weight_counts.items():p = ax.bar(species, weight_count, width, label=boolean, bottom=bottom)bottom += weight_countax.set_title("Number of penguins with above average body mass")
ax.legend(loc="upper right")plt.show()

在这里插入图片描述

2.线条形式

  简单的线条样式可以使用字符串 “solid”, “dotted”, “dashed” or “dashdot”.来定义。更精细的控制可以通过提供一个破折号元组(offset, (on_off_seq))来实现。例如,(0,(3,10,1,15))表示(3pt行,10pt空间,1pt行,15pt空间),没有偏移,而(5,(10,3))表示(10pt行,3pt空间),但跳过第一个5pt行。详见 Line2D.set_linestyle.
  注意: 破折号样式也可以通过Line2D配置。如自定义虚线样式和使用关键字破折号将破折号序列列表传递给property_cycle中的循环器所示。

import matplotlib.pyplot as plt
import numpy as nplinestyle_str = [('solid', 'solid'),      # Same as (0, ()) or '-'('dotted', 'dotted'),    # Same as (0, (1, 1)) or ':'('dashed', 'dashed'),    # Same as '--'('dashdot', 'dashdot')]  # Same as '-.'linestyle_tuple = [('loosely dotted',        (0, (1, 10))),('dotted',                (0, (1, 1))),('densely dotted',        (0, (1, 1))),('long dash with offset', (5, (10, 3))),('loosely dashed',        (0, (5, 10))),('dashed',                (0, (5, 5))),('densely dashed',        (0, (5, 1))),('loosely dashdotted',    (0, (3, 10, 1, 10))),('dashdotted',            (0, (3, 5, 1, 5))),('densely dashdotted',    (0, (3, 1, 1, 1))),('dashdotdotted',         (0, (3, 5, 1, 5, 1, 5))),('loosely dashdotdotted', (0, (3, 10, 1, 10, 1, 10))),('densely dashdotdotted', (0, (3, 1, 1, 1, 1, 1)))]def plot_linestyles(ax, linestyles, title):X, Y = np.linspace(0, 100, 10), np.zeros(10)yticklabels = []for i, (name, linestyle) in enumerate(linestyles):ax.plot(X, Y+i, linestyle=linestyle, linewidth=1.5, color='black')yticklabels.append(name)ax.set_title(title)ax.set(ylim=(-0.5, len(linestyles)-0.5),yticks=np.arange(len(linestyles)),yticklabels=yticklabels)ax.tick_params(left=False, bottom=False, labelbottom=False)ax.spines[:].set_visible(False)# For each line style, add a text annotation with a small offset from# the reference point (0 in Axes coords, y tick value in Data coords).for i, (name, linestyle) in enumerate(linestyles):ax.annotate(repr(linestyle),xy=(0.0, i), xycoords=ax.get_yaxis_transform(),xytext=(-6, -12), textcoords='offset points',color="blue", fontsize=8, ha="right", family="monospace")fig, (ax0, ax1) = plt.subplots(2, 1, figsize=(10, 8), height_ratios=[1, 3])plot_linestyles(ax0, linestyle_str[::-1], title='Named linestyles')
plot_linestyles(ax1, linestyle_tuple[::-1], title='Parametrized linestyles')plt.tight_layout()
plt.show()

在这里插入图片描述

3.折线图(多子图)

  本案例介绍简单折线图,并以子图方式呈现。指定横纵坐标。

import matplotlib.pyplot as plt
import numpy as npimport matplotlib.gridspec as gridspecfig = plt.figure(tight_layout=True)
gs = gridspec.GridSpec(2, 2)ax = fig.add_subplot(gs[0, :])
ax.plot(np.arange(0, 1e6, 1000))
ax.set_ylabel('YLabel0')
ax.set_xlabel('XLabel0')for i in range(2):ax = fig.add_subplot(gs[1, i])ax.plot(np.arange(1., 0., -0.1) * 2000., np.arange(1., 0., -0.1))ax.set_ylabel('YLabel1 %d' % i)ax.set_xlabel('XLabel1 %d' % i)if i == 0:ax.tick_params(axis='x', rotation=55)
fig.align_labels()  # same as fig.align_xlabels(); fig.align_ylabels()plt.show()

在这里插入图片描述

4.散点图

  散点图的演示与不同的标记颜色和大小。

import matplotlib.pyplot as plt
import numpy as npimport matplotlib.cbook as cbook# Load a numpy record array from yahoo csv data with fields date, open, high,
# low, close, volume, adj_close from the mpl-data/sample_data directory. The
# record array stores the date as an np.datetime64 with a day unit ('D') in
# the date column.
price_data = cbook.get_sample_data('goog.npz')['price_data']
price_data = price_data[-250:]  # get the most recent 250 trading daysdelta1 = np.diff(price_data["adj_close"]) / price_data["adj_close"][:-1]# Marker size in units of points^2
volume = (15 * price_data["volume"][:-2] / price_data["volume"][0])**2
close = 0.003 * price_data["close"][:-2] / 0.003 * price_data["open"][:-2]fig, ax = plt.subplots()
ax.scatter(delta1[:-1], delta1[1:], c=close, s=volume, alpha=0.5)ax.set_xlabel(r'$\Delta_i$', fontsize=15)
ax.set_ylabel(r'$\Delta_{i+1}$', fontsize=15)
ax.set_title('Volume and percent change')ax.grid(True)
fig.tight_layout()plt.show()

在这里插入图片描述

5.水平和垂直线条

  这个例子展示了函数hlines和vlines。

import matplotlib.pyplot as plt
import numpy as np# Fixing random state for reproducibility
np.random.seed(19680801)t = np.arange(0.0, 5.0, 0.1)
s = np.exp(-t) + np.sin(2 * np.pi * t) + 1
nse = np.random.normal(0.0, 0.3, t.shape) * sfig, (vax, hax) = plt.subplots(1, 2, figsize=(12, 6))vax.plot(t, s + nse, '^')
vax.vlines(t, [0], s)
# By using ``transform=vax.get_xaxis_transform()`` the y coordinates are scaled
# such that 0 maps to the bottom of the axes and 1 to the top.
vax.vlines([1, 2], 0, 1, transform=vax.get_xaxis_transform(), colors='r')
vax.set_xlabel('time (s)')
vax.set_title('Vertical lines demo')hax.plot(s + nse, t, '^')
hax.hlines(t, [0], s, lw=2)
hax.set_xlabel('time (s)')
hax.set_title('Horizontal lines demo')plt.show()

在这里插入图片描述

6.饼状图

1)饼状图

  画一幅动物的饼状图,并在各部分贴上标签。要添加标签,将标签列表传递给labels参数

import matplotlib.pyplot as pltlabels = 'Frogs', 'Hogs', 'Dogs', 'Logs'
sizes = [15, 30, 45, 10]fig, ax = plt.subplots()
ax.pie(sizes, labels=labels)

在这里插入图片描述

2)“条形饼”图

  制作一个“条形饼”图,其中饼的第一个部分被“分解”成一个条形图,其中进一步细分了该部分的特征。该示例演示了使用具有多组轴的图形,并使用轴补丁列表添加两个ConnectionPatches以链接子图。

import matplotlib.pyplot as plt
import numpy as npfrom matplotlib.patches import ConnectionPatch# make figure and assign axis objects
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(9, 5))
fig.subplots_adjust(wspace=0)# pie chart parameters
overall_ratios = [.27, .56, .17]
labels = ['Approve', 'Disapprove', 'Undecided']
explode = [0.1, 0, 0]
# rotate so that first wedge is split by the x-axis
angle = -180 * overall_ratios[0]
wedges, *_ = ax1.pie(overall_ratios, autopct='%1.1f%%', startangle=angle,labels=labels, explode=explode)# bar chart parameters
age_ratios = [.33, .54, .07, .06]
age_labels = ['Under 35', '35-49', '50-65', 'Over 65']
bottom = 1
width = .2# Adding from the top matches the legend.
for j, (height, label) in enumerate(reversed([*zip(age_ratios, age_labels)])):bottom -= heightbc = ax2.bar(0, height, width, bottom=bottom, color='C0', label=label,alpha=0.1 + 0.25 * j)ax2.bar_label(bc, labels=[f"{height:.0%}"], label_type='center')ax2.set_title('Age of approvers')
ax2.legend()
ax2.axis('off')
ax2.set_xlim(- 2.5 * width, 2.5 * width)# use ConnectionPatch to draw lines between the two plots
theta1, theta2 = wedges[0].theta1, wedges[0].theta2
center, r = wedges[0].center, wedges[0].r
bar_height = sum(age_ratios)# draw top connecting line
x = r * np.cos(np.pi / 180 * theta2) + center[0]
y = r * np.sin(np.pi / 180 * theta2) + center[1]
con = ConnectionPatch(xyA=(-width / 2, bar_height), coordsA=ax2.transData,xyB=(x, y), coordsB=ax1.transData)
con.set_color([0, 0, 0])
con.set_linewidth(4)
ax2.add_artist(con)# draw bottom connecting line
x = r * np.cos(np.pi / 180 * theta1) + center[0]
y = r * np.sin(np.pi / 180 * theta1) + center[1]
con = ConnectionPatch(xyA=(-width / 2, 0), coordsA=ax2.transData,xyB=(x, y), coordsB=ax1.transData)
con.set_color([0, 0, 0])
ax2.add_artist(con)
con.set_linewidth(4)plt.show()

在这里插入图片描述
E N D ! \color{#4285f4}{\mathbf{E}}\color{#ea4335}{\mathbf{N}}\color{#fbbc05}{\mathbf{D}}\color{#4285f4}{\mathbf{!}} END!

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

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

相关文章

想在先锋文汇发表文章?看看投稿方法吧

、 1. 主题明确:选择一个鲜明的主题,与党的工作和中心任务相关。可以选择与当前热点问题、党的路线方针政策有关的话题,以各级党组织开展的活动、党员先进事迹等为素材。编辑【yangwei013049】 2. 紧密联系实际:文章要贴近实际&…

虚拟资源在线交易服务平台源码 线上虚拟商品交易平台搭建

在信息爆炸的时代,虚拟资源、素材、源码系统等等以其独特的魅力,逐渐成为人们日常生活和工作中不可或缺的一部分。如何高效地获取、管理和交易这些虚拟资源,分享一款虚拟资源在线交易服务平台源码,轻松搭建线上虚拟商品交易平台&a…

C++之Eigen库基本使用(下)

1、常见变换 Eigen::Matrix3d //旋转矩阵(3*3) Eigen::AngleAxisd //旋转向量(3*1) Eigen::Vector3d //欧拉角(3*1) Eigen::Quaterniond //四元数(4*1) Eigen::Isom…

STL库具体容器与用法

vector动态数组: 算法&#xff1a;for_each迭代器&#xff1a;vector<int>::iterator 头文件:<vector> 声明&#xff1a;vector<数据类型> 变量名 定义一个整形的vector容器&#xff1a;vector<int> v 迭代器&#xff1a;vector<数据类型>:…

drm 和 sysfs

DRM 全称是Direct Rendering Manager&#xff0c;进行显示输出管理、buffer 分配、帧缓冲。对应userspace 库为libdrm&#xff0c;libdrm 库提供了一系列友好的控制封装&#xff0c;使用户可以方便的进行显示的控制和buffer 申请。 DRM的设备节点为"/dev/dri/cardX"…

Docker运行出现iptables: No chain/target/match by that name报错如何解决?

在尝试重启 Docker 容器时遇到的错误信息表明有关 iptables 的配置出了问题。这通常是因为 Docker 需要配置网络&#xff0c;而 iptables 规则没有正确设置或被意外删除。具体到你的错误信息中&#xff0c;报错 iptables: No chain/target/match by that name 表示 Docker 尝试…

深入理解与应用C++ Vector

1. C Vector 简介与基本使用 C 的 vector 是一个序列容器&#xff0c;用于表示可变大小的数组。它结合了数组的高效元素访问和动态大小调整的灵活性。与静态数组相比&#xff0c;vector 的大小可以根据需要自动调整&#xff0c;这是通过在底层使用动态数组来实现的。当新元素被…

[原创](Modern C++)现代C++的Lambda表达式常规概念以及细节探讨

[简介] 常用网名: 猪头三 出生日期: 1981.XX.XX QQ联系: 643439947 个人网站: 80x86汇编小站 https://www.x86asm.org 编程生涯: 2001年~至今[共22年] 职业生涯: 20年 开发语言: C/C、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 开发工具: Visual Studio、D…

【Day2:JAVA变量、数据类型、运算符的认识】

目录 1、变量的介绍、定义、使用2、标识符2.1 概念2.2 标识符的命名规则2.3 标识符的命名规范 3、数据类型3.1 基本数据类型3.2 引用数据类型 4、Scanner键盘录入4.1 键盘录入效果介绍4.2 键盘录入的三个步骤 5、运算符5.1 运算符和表达式5.2 算数运算符5.3 自增自减运算符5.4 …

JUC------共享模型------管程

概念 什么是管程 管程&#xff08;Monitor&#xff0c;直译是”监视器“的意思&#xff09;是一种操作系统中的同步机制&#xff0c;它的引入是为了解决多线程或多进程环境下的并发控制问题。 翻译为 Java 领域的语言&#xff0c;就是管理类的成员变量和成员方法&#xff0c;…

在vue3中测试执行typescript代码片段

官方推荐的vitest方法 在vue3typescript项目中&#xff0c;一般来说用vite做构建系统。做测试的话&#xff0c;目前官方推荐的是vitest。官方文档在 https://vitest.dev/guide/ 在vue3typescriptvite5项目中&#xff0c;运行安装命令 npm install -D vitest 就可以把vites…

批量获取oracle库存储过程

场景:需要获取oracle库下的存储过程做备份 示例:获取单个存储过程,sql实现如下 SELECT owner,object_name,object_type FROM dba_objects; SELECT DBMS_LOB.SUBSTR(DBMS_METADATA.GET_DDL(FUNCTION,CONCATSTR,TEST)) FROM DUAL; CREATE OR REPLACE EDITIONABLE FUNCTION &quo…

【教学类-55-02】20240512图层顺序挑战(四格长条纸加黑色边框、4*4、7张 、43200张去掉非7色有23040张,去掉重复样式有几种?)

作品展示 背景需求&#xff1a; 之前的代码吗存在几个问题&#xff0c;最大的问题是不能生成“”长条黑边框”” 【教学类-55-01】20240511图层顺序挑战&#xff08;四格长条纸&#xff09;&#xff08;4*4&#xff09;和“手工纸自制参考图”-CSDN博客文章浏览阅读485次&…

使用Navicat将MySql数据库导入和导出

一&#xff0c;导出数据表 1.使用Navicat打开数据库&#xff0c;右键数据库&#xff0c;点击转储SQL文件&#xff0c;点击结构和数据。 2.选择生成文件的地方 3.等待生成完成 4.生成完成 二&#xff0c;导入数据库表和数据SQL文件 1.新建一个数据库 2.右键选择运行SQl文件 记…

OSPF协议1

OSPF开放式最短路径优先协议 1&#xff0c;OSPF协议因为其传递的是拓扑信息&#xff0c;之后&#xff0c;通过SPF算法将图形结构转换成为树形结构&#xff0c;所以&#xff0c;其计算出的路径不存在环路。并且&#xff0c;OSPF是使用带宽作为开销值的评判标准&#xff0c;所以…

如何利用甘特图来提高资源的是使用效率?

在项目管理中&#xff0c;甘特图是一种常用的工具&#xff0c;用于规划和跟踪项目进度。它通过条形图的形式展示项目的时间表和任务依赖关系&#xff0c;帮助项目经理和团队成员清晰地了解项目的时间线和进度。通过合理利用甘特图&#xff0c;可以显著提高资源的使用效率&#…

一文入门DNS

概述 DNS是一个缩写&#xff0c;可以代表Domain Name System&#xff0c;域名系统&#xff0c;是互联网的一项基础服务。也可以代表Domain Name Server&#xff0c;域名服务器&#xff0c;是进行域名和与之相对应的IP地址相互转换的服务器。DNS协议则是用来将域名转换为IP地址…

1W、2W 3KVAC隔离 宽电压输入 交直两用AC/DC 电源模块 ——TP01(02)AZ 系列

TP01(02)AZ为客户提供一款超小体积模块式开关电源&#xff0c;该系列模块电源输出功率为1W、2W&#xff0c;具有极低的空载损耗&#xff0c;低漏电流仅0.1mA&#xff0c;小体积&#xff0c;隔离耐压高达3KV等特点。产品安全可靠&#xff0c;EMC 性能好&#xff0c;EMC 及安全规…

Ubuntu安装Mysql数据库无法远程连接

1.远程端口未开 2.Mysql 数据库中user表 2.1 用户名root 的host字段味更改为% 允许远程访问&#xff1b; use mysql;SELECT user,host,plugin,authentication_string FROM user;userhostpluginauthentication_stringroot%auth_socketdebian-sys-maintlocalhostcaching_sha2_p…

树莓派配置双网卡分别为AD HOC和AP模式

树莓派配置双网卡分别为AD HOC和AP模式 需求说明&#xff1a;为了实现分级网络管理&#xff0c;将多个无人机分簇&#xff0c;簇间使用AD HOC进行无中心自组织的网络&#xff0c;簇内使用AP-AC模式进行中心化网络。因此&#xff0c;需要配置一台设备&#xff0c;同时完成AD HOC…