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

news2024/11/25 10:26:35

目录

  • 一、引言
  • 二、实例介绍
      • 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.5

fig, 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_count

ax.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 np

linestyle_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 np

import matplotlib.gridspec as gridspec

fig = 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 np

import 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 days

delta1 = 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) * s

fig, (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 plt

labels = '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 np

from 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 -= height
    bc = 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.coloradmin.cn/o/1671852.html

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

相关文章

杠上Google I/O?OpenAI抢先一天直播,ChatGPT或将具备通话功能

本周的 AI 圈注定热闹非凡。 当地时间 5 月 13 日,OpenAI 将直播发布 ChatGPT 与 GPT-4 的更新。次日,Google I/O 如约而至。不同于 I/O 大会是谷歌的年度盛会,OpenAI 此次的临时发布颇有点抢热度的意思。这对纠缠已久的「老对头」此次又会如…

宝塔助手v1.4.1/手机操控云服务器的神器软件

宝塔助手是以宝塔Linux面板提供的API开发的一款可以随时随地管理服务器的APP。通过这款APP你可以随时随地的查看一台或多台服务器的运行情况,对服务器网站、FTP、数据库、文件进行管理。内置文件编辑器,可以对网站文件进行修改。 链接:https:…

Spring框架深度解析:打造你的Java应用梦工厂

想要在Java企业级应用开发中大展身手?Spring框架的核心容器是你不可或缺的伙伴! 文章目录 一. 引言1.1 介绍Spring框架的重要性1.2 阐述核心容器在Spring框架中的作用1.3 故事开端 二. 背景介绍2.1 描述Spring框架的发展历程2.2 概述Spring框架的主要特点…

计算机Java项目|Springboot房产销售系统

作者主页:编程指南针 作者简介:Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容:Java项目、Python项目、前端项目、人工智能与大数据、简…

数据结构——循环队列(数组)

一、循环队列的定义 二、循环队列图示 三、循环队列使用规则 为解决队满和队空的判断条件相同。 我们 采用 损失一个单元不用的方法 即当循环队列元素的个数是MAXSIZE-1时,就认为队列已满(front指向空的单元) 这样循环队列的队满条件就变…

提升文本到图像模型的空间一致性:SPRIGHT数据集与训练技术的新进展

当前的T2I模型,如Stable Diffusion和DALL-E,虽然在生成高分辨率、逼真图像方面取得了成功,但在空间一致性方面存在不足。这些模型往往无法精确地按照文本提示中描述的空间关系来生成图像。为了解决这一问题,研究人员进行了深入分析…

vivado Virtex UltraScale 配置存储器器件

Virtex UltraScale 配置存储器器件 下表所示闪存器件支持通过 Vivado 软件对 Virtex UltraScale ™ 器件执行擦除、空白检查、编程和验证等配置操作。 本附录中的表格所列赛灵思系列非易失性存储器将不断保持更新 , 并支持通过 Vivado 软件对其中所列非易失…

交易复盘-20240513

仅用于记录当天的市场情况,用于统计交易策略的适用情况,以便程序回测 短线核心:不参与任何级别的调整,采用龙空龙模式 一支股票 10%的时候可以操作, 90%的时间适合空仓等待 双成药业 (1)|[9:30]|[3566万]|0.34 中通客车 (1)|[9:43]|[7678万]|0.15 嘉华股份 (2)|[9:30]|[36…

分类预测 | Matlab实现DBO-CNN-SVM蜣螂算法优化卷积神经网络结合支持向量机多特征分类预测

分类预测 | Matlab实现DBO-CNN-SVM蜣螂算法优化卷积神经网络结合支持向量机多特征分类预测 目录 分类预测 | Matlab实现DBO-CNN-SVM蜣螂算法优化卷积神经网络结合支持向量机多特征分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现DBO-CNN-SVM蜣螂算法…

【软设】常见易错题汇总

目录 计算机系统基础 程序语言基础 数据结构 算法设计与分析 计算机网络与信息安全 软件工程基础 开发方法(结构化与面向对象) 数据库 操作系统 知识产权相关的法律法规 🤯🤯🤯🤯🤯&#x1f9…

2024最新软件测试【测试理论+ 数据库】面试题(内附答案)

一、测试理论 3.1 你们原来项目的测试流程是怎么样的? 我们的测试流程主要有三个阶段:需求了解分析、测试准备、测试执行。 1、需求了解分析阶段 我们的 SE 会把需求文档给我们自己先去了解一到两天这样,之后我们会有一个需求澄清会议, …

外卖系统微信小程序支付

微信小程序支付时序图 其中第9.步骤就是微信小程序前端调用wx.requestPayment

如何写好网评文章?写好了怎么去投稿呢,教程来了

如何写好网评文章,可谓仁者见仁、智者见智。俗话说:“冰冻三尺非一日之寒。”写好网评文章决不是一朝一夕能够练成的,是一个漫长的修炼的过程,需要我们耐得住寂寞、静得下心神。从事网评写作六年多,我有一些心得体会和…

Linux-磁盘管理类实训

一、Linux分区和磁盘操作命令 (1)将系统内所有的分区(文件系统)列出来) (2)将系统中所有特殊文件格式及名称都列出来 (3)将/bin下面的可以用的磁盘容量以易读的容量格式…

Dev-C++的下载和安装教程(超详细图文,小白入门)

Dev-C(或者叫做Dev-Cpp)是Windows环境下的一个轻量级C/C集成开发环境(IDE)。它是一款自由软件,遵守GPL许可协议分发源代码。 Dev-C集合了功能强大的源码编辑器、MingW64/TDM-GCC编译器、GDB调试器和AStyle格式整理器等…

通过ip addr命令无法获取到ip地址,无法ping通百度

问题 今天通过VM安装CentOS虚拟机时,安装完成后,想查看ip地址,使用ip addr命令,发现没有展示网络ip地址,ping百度也不通。 解决方案 CentOS使用网络配置文件来设置网络接口的参数,出现这个问题说明网络的…

初识C++ · string的使用(1)

目录 1 STL简介 2 string类 2.1 构造 析构 拷贝 2.2 size length 2.3 [ ]的使用 2.4 迭代器 2.5 Push_Back和append 3 sort的使用 1 STL简介 STL是一个标准库,是C标准库的一个重要部分,那么什么是STL?STL是一个模板库,包…

Python自动化测试 | 如何使用Robot Framework进行自动化测试?

你还在手动测试?不妨了解一下更高效、准确且简单的测试方法——使用Python的Robot Framework进行自动化测试。 什么是Robot Framework? Robot Framework是一款开源的Python自动化测试框架,它基于关键字驱动的思想,具有易读、易扩…

Day_4

1. 地址簿功能 查询地址列表 属于常规方案 新增地址 属于常规方案 修改地址 删除地址 设置默认地址 2. 用户下单业务 数据库分析 订单表和订单明细表的关系:一对多 代码开发 controller 层 service 层 异常处理(收货地址为空、超出配送范围、购物…

使用规则进行命名实体识别(NER)

使用规则进行命名实体识别(NER) 命名实体识别(Named Entity Recognition,NER)是自然语言处理(NLP)中的一项基础任务,它旨在从文本中识别出具有特定意义的实体,如人名、地…