基于python的matplotlib、numpy库实现的图形绘制(数据可视化)

news2024/11/15 21:32:35

一、sin,cos函数

1.题目要求

编写程序,绘制正弦曲线和余弦曲线。

提示:利用numpy的linspace()、sin()或cos()函数生成样本数据、正弦或余弦值。

2.函数讲解及代码

import matplotlib.pyplot as plt
import numpy as np

#linspace函数是用于生成一个等差数列的函数。它的作用是将给定的区间等分成若干份,然后返回这些点的坐标值,从而得到一个等差数列。linspace函数的参数包括起始点、终止点和要生成的点的个数等。
#np.linspace(起始值,最终值,取点数)
x = np.linspace(-np.pi, np.pi, num=256)
#np.pi就表示为Π,创建x数组,去-Π到Π等间隔的256个数(如不定义num,默认值为50)
y = np.sin(x)
z = np.cos(x)

#设置x轴的刻度范围和刻度标签
#xlim(left=None,right=None,emit=Ture,auto=Flase,*,xmin=None,xmax=None)
#left/right:表示x轴刻度取值区间的左位数/右位数
#emit:表示是否通知限制变化的观察者,默认为True
#auto:表示是否允许自动缩放x轴,默认值为Ture
plt.xlim(x.min()*1.5, x.max()*1.5)
#刻画刻度取值范围,最小值前取1.5,最大值后取1.5

#xticks(tick=None, lable=None, **kwargs)
#ticks:表示刻度显示的位置列表,该参数可以设置为空列表,以此禁用x轴的刻度
#labels:表示指定位置刻度的标签列表
plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi], [r'$-\pi$', r'$-\pi/2$', 0, r'$\pi/2$', r'$\pi$'])
#第一个列表表示刻度名称,第二个列表刻画图上刻度位置

plt.plot(x, y)
plt.plot(x, z)
plt.show()

 3.运行图样

4.扩展

x = np.linspace(-np.pi, np.pi, num=256)
print(x)
#加上print看看linspace函数的输出
#改变num的数值为1,2,10,50,100

plt.xlim(x.min()*1.5, x.max()*1.5)
#将代码中此行替换为
plt.xlim(x.min(), x.max())
plt.xlim(x.min()*2, x.max()*1.5)
plt.xlim(x.min()*1, x.max()*1.5)
#进行对xlim函数的理解

二、柱状图

1.题目要求

已知实验中学举行了高二期中模拟考试,考试后分别计算了全体男生、女生各科的平均成绩,统计结果如表1所示。

表1 全校高二男生、女生的平均成绩

学科

平均成绩(男)

平均成绩(女)

语文

85.5

94

数学

91

82

英语

72

89.5

物理

59

62

化学

66

49

生物

55

53

按照以下要求绘制图表:

(1)绘制柱形图。柱形图的x轴为学科,y轴为平均成绩。

(2)绘制堆积柱形图。堆积柱形图的x轴为学科,y轴为平均成绩。

2.函数讲解及代码

(1)柱形图

import matplotlib.pyplot as plt
import numpy as np

plt.rcParams['font.sans-serif'] = [u'SimHei']
#避免图例中无法显示中文

bar_wight = 0.3
x_title = ["语文", "数学", "英语", "物理", "化学", "生物"]

y_boy = np.array([85.5, 91, 72, 59, 66, 55])
y_girl = np.array([94, 82, 89.5, 62, 49, 53])
x_value = np.arange(len(x_title))

plt.bar(x_value, y_boy, tick_label=x_title, width=bar_wight, label="男生")
plt.bar(x_value+bar_wight, y_girl, width=bar_wight, label="女生")

#向每个柱形的顶部添加注释文本,标注平均成绩
for a, b, c in zip(x_value, y_boy, y_girl):
    # zip函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
    plt.text(a - bar_wight/2, b, y_boy[a], fontsize=9)
    plt.text(a + bar_wight/2, c, y_girl[a], fontsize=9)
    # text(x, y, s, **kwargs)
    #x,y定位
    #s要显示的内容

plt.xticks(x_value+bar_wight/2, x_title)
#将x轴刻度标签放在两组柱形中间
plt.axhline(y=(85.5+91+72+59+66+55+94+82+89.5+62+49+53)/12, linestyle='--', label='平均成绩')
#在轴上添加一条直线
plt.ylabel("平均成绩(分)")

plt.title("高二男生、女生的平均成绩")
plt.legend()
plt.show()

(2)堆积柱形图

import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = [u'SimHei']
girl = plt.bar([1, 2, 3, 4, 5, 6], [94, 82, 89.5, 62, 49, 53], label="女生")
boy = plt.bar([1, 2, 3, 4, 5, 6], [85.5, 91, 72, 59, 66, 55], bottom=[94, 82, 89.5, 62, 49, 53], label="男生")
plt.xticks([1, 2, 3, 4, 5, 6], ["语文", "数学", "英语", "物理", "化学", "生物"])

plt.xlabel("学科")
plt.ylabel("平均成绩")

plt.legend()
plt.show()

 3.运行图样

(1)柱状图

(2)堆积柱状图 

三、饼状图

1.题目要求

拼多多作为互联网电商的一匹黑马,短短几年用户的规模已经超过3亿。2019年9月拼多多平台对所有子类目的销售额进行了统计,结果如表2所示。

表2 拼多多平台子类目的销售额

子类目

销售额(亿)

童装

29665

奶粉辅食

3135.4

孕妈专区

4292.4

洗护喂养

5240.9

宝宝尿裤

5543.4

春夏新品

5633.8

童车童床

6414.5

玩具文娱

9308.1

童鞋

10353

根据表2的数据绘制一个反映拼多多平台子类目销售额占比情况的饼图。

2.函数讲解及代码

import matplotlib.pyplot as plt
import numpy as np

plt.rcParams["font.sans-serif"] = [u'SimHei']
y = np.array([29665, 3135.4, 4292.4, 5240.9, 5543.4, 5633.8, 6414.5, 9308.1, 10353])
title = np.array(["童装", "奶粉辅食", "孕妈专区", "洗护喂养", "宝宝尿裤", "春夏新品", "童车童床", "玩具文娱", "童鞋"])

plt.figure(dpi=100, figsize=(10, 8))
plt.pie(y, autopct='%.2f%%')

plt.legend(title, loc='upper right', ncol=5)

plt.table(cellText=[y],
          colWidths=[0.1] * 9,
          rowLabels=['单位:亿元'],
          colLabels=title,
          loc='lower center'
          )

plt.title("拼多多平台子类目的销售额")
plt.show()

3.运行图样

 

四、折线图

1.题目要求

下表为郑州近一个月天气,根据要求绘制图形。

城市

日期

白天

夜间

天气状况

风力方向

最高温度

天气状况

风力方向

最低温度

郑州

2022-04-07

 晴

南风 1-2级

25℃

南风 1-2级

 13℃

郑州

2022-04-06

 晴

东北风 3-4级

23℃

东北风 3-4级

 10℃

郑州

2022-04-05

 晴

西北风 1-2级

29℃

西北风 1-2级

 12℃

郑州

2022-04-04

 多云

南风 3-4级

24℃

多云

南风 3-4级

 14℃

郑州

2022-04-03(星期日)

 晴

南风 3-4级

22℃

多云

南风 3-4级

 9℃

郑州

2022-04-02(星期六)

 晴

北风 3-4级

19℃

北风 3-4级

 5℃

郑州

2022-04-01

 多云

南风 3-4级

18℃

南风 3-4级

 7℃

郑州

2022-03-31

 阴

东北风 1-2级

15℃

多云

东北风 1-2级

 6℃

郑州

2022-03-30

 阴

东北风 3-4级

19℃

东北风 3-4级

 9℃

郑州

2022-03-29

 多云

南风 3-4级

22℃

南风 3-4级

 10℃

郑州

2022-03-28

 多云

南风 3-4级

18℃

多云

南风 3-4级

 9℃

郑州

2022-03-27(星期日)

 多云

东北风 1-2级

15℃

多云

东北风 1-2级

 6℃

郑州

2022-03-26(星期六)

 多云

西风 3-4级

20℃

多云

西风 3-4级

 8℃

郑州

2022-03-25

 小雨

北风 1-2级

13℃

北风 1-2级

 8℃

郑州

2022-03-24

 多云

南风 1-2级

19℃

小雨

南风 1-2级

 9℃

郑州

2022-03-23

 晴

南风 3-4级

19℃

南风 3-4级

 6℃

郑州

2022-03-22

 阴

西南风 3-4级

12℃

西南风 3-4级

 3℃

郑州

2022-03-21

 小雨

东北风 1-2级

8℃

东北风 1-2级

 3℃

郑州

2022-03-20(星期日)

 阴

东南风 1-2级

10℃

东南风 1-2级

 5℃

郑州

2022-03-19(星期六)

 阴

东北风 1-2级

7℃

东北风 1-2级

 3℃

郑州

2022-03-18

 多云

南风 3-4级

13℃

多云

南风 3-4级

 3℃

郑州

2022-03-17

 阴

东北风 3-4级

9℃

东北风 3-4级

 3℃

郑州

2022-03-16

 小雨

东北风 4-5级

16℃

小雨

东北风 4-5级

 3℃

郑州

2022-03-15

 多云

西北风 1-2级

24℃

西北风 1-2级

 12℃

郑州

2022-03-14

 多云

西北风 3-4级

23℃

多云

西北风 3-4级

 11℃

郑州

2022-03-13(星期日)

 多云

东风 3-4级

22℃

小雨

东风 3-4级

 9℃

郑州

2022-03-12(星期六)

 小雨

东风 1-2级

20℃

多云

东风 1-2级

 9℃

郑州

2022-03-11

 晴

东风 3-4级

25℃

东风 3-4级

 12℃

郑州

2022-03-10

 多云

南风 1-2级

24℃

南风 1-2级

 10℃

郑州

2022-03-09

 多云

东南风 3-4级

22℃

多云

东南风 3-4级

 10℃

使用折线图绘制三十天的最高温度和最低温度变化图,纵坐标为温度,横坐标为日期。

2.函数讲解及代码

import matplotlib.pyplot as plt
import numpy as np

plt.rcParams["font.sans-serif"] = [u'SimHei']
plt.rcParams['axes.unicode_minus'] = False

fig = plt.figure(figsize=(15, 10), dpi=90)
x_data = np.array(["03-09", "03-10", "03-11", "03-12", "03-13", "03-14", "03-15", "03-16", "03-17", "03-18", "03-19", "03-20", "03-21", "03-22", "03-23", "03-24", "03-25", "03-26", "03-27", "03-28", "03-29", "03-30", "03-31", "04-01", "04-02", "04-03", "04-04", "04-05", "04-06", "04-07"])
max = np.array([22, 24, 25, 20, 22, 23, 24, 16, 9, 13, 7, 10, 8, 12, 19, 19, 13, 20, 15, 18, 22, 19, 15, 18, 19, 22, 24, 29, 23, 25])
min = np.array([10, 10, 12, 9, 9, 11, 12, 3, 3, 3, 3, 5, 3, 3, 6, 9, 8, 8, 6, 9, 10, 9, 6, 7, 5, 9, 14, 12, 10, 13])
plt.ylim(-5, 40)
plt.grid(axis='y')
plt.annotate("最高温", xy=("03-20", 10), xytext=("03-20", 15), arrowprops=dict(arrowstyle="->"))

plt.plot(x_data, max, marker=".", label='一天之内的最高温')
plt.plot(x_data, min, marker=".", label='一天之内的最低温')
plt.xlabel("日期")
plt.ylabel("温度/℃")

plt.legend()
plt.show()

3.运行图样

 

五、自定义布局构建子图

 1.题目要求

按照自定义的布局结构绘制子图,具体如图1:

图1 自定义的布局结构 

2.函数讲解及代码

import matplotlib.pyplot as plt
fig = plt.figure()

ax1 = plt.subplot2grid((3, 4), (0, 0), colspan=4)
ax2 = plt.subplot2grid((3, 4), (1, 0), colspan=2)
ax3 = plt.subplot2grid((3, 4), (1, 2), colspan=2)
ax4 = plt.subplot2grid((3, 4), (2, 0), colspan=1)
ax5 = plt.subplot2grid((3, 4), (2, 1), colspan=3)

fig.tight_layout()
plt.show()

3.运行图样

 六、绘制动态图

1.题目要求

绘制一个具有动画效果的图表,具体要求如下:

1>绘制一条正弦曲线;

2>绘制一个红色圆点,该圆点最初位于正弦曲线的左端;

3>制作一个圆点沿曲线运动的动画,并时刻显示圆点的坐标位置。

2. 函数讲解及代码

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


# 指定渲染环境


# %matplotlib notebook # Warning: Cannot change to a different GUI toolkit: notebook. Using qt5 instead.
# %matplotlib inline

# 添加动画点
def update(num):
    # if num%5==0:
    #     point_ani.set_marker("*")
    #     point_ani.set_markersize(12)
    # else:
    #     point_ani.set_marker("o")
    #     point_ani.set_markersize(8)

    point_ani.set_data(x[num], y[num])
    text_pt.set_text("x=%.3f, y=%.3f" % (x[num], y[num]))
    # 设置文本字符串 s。它可能包含换行符 () 或 LaTeX 语法中的数学运算
    return point_ani, text_pt,


x = np.linspace(0, 2 * np.pi, 100)
y = np.sin(x)

fig = plt.figure(tight_layout=True)
plt.plot(x, y)
point_ani, = plt.plot(x[0], y[0], 'ro')
plt.grid(ls="--")
text_pt = plt.text(4, 0.8, '', fontsize=16)  # 点的位置以文本形式输出

ani = animation.FuncAnimation(fig, update, np.arange(0, 100), interval=100, blit=False)

# ani.save('sin_test3.gif', writer='imagemagick', fps=10)
plt.show()

3.运行图样(部分)

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

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

相关文章

【MySQL数据库 | 第二十篇】explain执行计划

目录 前言: explain: 语法: 总结: 前言: 上一篇我们介绍了从时间角度分析MySQL语句执行效率的三大工具:SQL执行频率,慢日志查询,profile。但是这三个方法也只是在时间角度粗略的…

kubernetes入门案例

kubernetes入门案例 本文我们通过一个 Java Web 应用例子来介绍 kubernetes 的使用,可以让新手快速上手和实践。 此 Java Web 应用的结构比较简单,是一个运行在 Tomcat 里的 Web App,JSP 页面通过 JDBC 直接访问 MySQL 数据库并展示数据。…

青梅产业成立“国家队”,溜溜梅迎来树立品牌良机?

扩大内需在今年政府工作报告中被频频提及。国务院发展研究中心原副主任王一鸣认为,激活潜在消费需求,将释放中国超大规模市场的经济增长潜力。 如今,休闲零食市场也正在经历这样一场激活潜在需求的变革。无论是洽洽食品、三只松鼠、良品铺子…

Kubernetes(k8s)容器编排概述

目录 1 k8s 是什么2 K8s的由来2.1 K8s发展历程2.2 发展时间线 3 为什么使用k8s3.1 什么是容器3.2 什么是 Kubernetes3.3 K8s 的著名优势特色3.3.1 一个平台搞定所有3.3.2 云环境无缝迁移3.3.3 高效的利用资源3.3.4 开箱即用的自动缩放能力3.3.5 使 CI/CD 更加简单3.3.6 可靠性 …

香橙派 1. 上手,配置wifi以及vnc

0. 环境 香橙派4以及电源 读卡器 32GB TF卡 1. 重新烧写固件 Orangepi4_2.1.2_ubuntu_bionic_desktop_linux4.4.179.img 用sd card formatter 格式化TF卡 安装Win32DiskImager,打开,选择IMG,确认U盘,点击写入。 2. 插上TTL 注意…

Mybatis相关知识(2)

Mybatis相关知识 今天接着上期mybatis相关知识进行讲解,今天主要是讲解mybatis和数据库相关的映射,标签和SQL编写等。 会结合实际业务和代码进行讲解。 1 占位符和传参的相关问题 先来看两条xml的SQL。第一条SQL从id名称可知,是根据id删除数…

cookie、session、token学习笔记

一.cookie 1.什么是cookie? Cookie用于存储web页面的用户信息。 Cookie是一些数据,存储于你电脑的文本文件中。 当web服务器向浏览器发送web页面时,在连接关闭后,服务端不会记录用户的信息。 而Cookie的作用就是用于解决“如…

【unity每日一记】 三大金星之(音频Audio + 碰撞和触发+光源组件)

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:uni…

Kubernetes(k8s)部署模式发展

目录 1 简介2 物理单机(~2000)2.1 主要代表 3 虚拟化:初期(2001~2009)3.1 VMware3.2 laaS 4 虚拟化:成熟期(2010~至今)4.1 OpenStack4.2 虚拟化四巨头 5 容器化:(2013-至今)5.1 Dock…

【从零开始学习JAVA | 第十三篇】继承

目录 前言: 引入: 继承: 小拓展: 优点: 成员方法的继承问题: 总结: 前言: 继承是面向对象三大特性之一,它是在封装之后我们讲解的一个重要的性质,继承…

【Kubernetes资源篇】DaemonSet控制器入门实战详解

文章目录 一、DaemonSet控制器理论知识1、DaemonSet控制器是什么?2、DaemonSet控制器工作原理3、DaemonSet典型应用场景4、DaemonSet与Deployment的区别 二、案例:DaemonSet控制器实战演示1、使用DaemonSet部署日志收集组件2、DaemonSet管理Pod滚动更新 …

数据库期末复习大总结 数据库课程学习资料(包含数据库全部章节的经典例题)【我的数据库期末复习】

为刚开始上大学数据库课程 提供学习方向【我的数据库期末复习】 第一章 绪论1.1 数据库系统概述 第二章 关系数据库2.1 关系的基本概念2.2 关系的完整性 关系数据库标准语言SQL3.1.1 SQL创建模式和表3.1.2 SQL修改和删除表3.2.1 SQ单表查询3.2.2 分组聚合和分组过滤3.2.3 多表联…

Matplotlib---散点图

1. 散点图 scatter函数用于绘制散点图。下面是scatter函数的语法格式: scatter(x, y, sNone, cNone, markerNone, cmapNone, normNone, vminNone, vmaxNone, alphaNone, linewidthsNone, edgecolorsNone, **kwargs)参数解释: x:指定散点的…

【二分查找】详细图解

目录 一.什么是二分查找法? 二.算法要求 三.算法思想 图解(要找的数k的值为3) 参考代码 一.什么是二分查找法? 二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是&am…

GEE:DYNAMICWORLD/V1数据集介绍

作者:CSDN @ _养乐多_ 本文将介绍GOOGLE/DYNAMICWORLD/V1数据集。 在Dynamic World数据集中,每个波段代表了某个特定类别的土地覆盖概率。这些概率表示了一个像素完全被某种土地覆盖类别所覆盖的可能性,其取值范围从0到1。每个波段的名称和描述指示了对应类别的土地覆盖类…

成为CSDN创作者的第2048天,我收获了什么?

👏作者简介:大家好,我是爱敲代码的小黄,独角兽企业的Java开发工程师,CSDN博客专家,阿里云专家博主📕系列专栏:Java设计模式、Spring源码系列、Netty源码系列、Kafka源码系列、JUC源码…

linux下容器 安装 操作 介绍

介绍: 容器是一种轻量级的虚拟化技术,可以将应用程序及其依赖项打包到一个独立的运行环境中,从而实现快速部署、可移植性和可扩展性。容器可以在不同的操作系统和云平台上运行,使得应用程序的部署和管理变得更加简单和高效。 安…

八大指针笔试题带你overcome指针

作者主页:paper jie的博客_CSDN博客-C语言,算法详解领域博主 本文作者:大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。 本文录入于《C语言》专栏,本专栏是针对于大学生,编程小白精心打造…

pgsql序列的使用

大家都知道pgsql和mysql不同,mysql字段有有自增属性,pgsql并没有,但是pgsql和oracle一样有序列,很多人刚接触pgsql的时候,并不知道序列是什么,怎么用,下面这篇文章就介绍序列,并且怎…

Flutter系列(十一)实现商城首页和商品详情页

基础工程: Flutter系列(四)底部导航顶部导航图文列表完整代码_摸金青年v的博客-CSDN博客 一、前言 本文用flutter实现商城首页和商品详情页,效果如下图: 二、使用的组件 MasonryGridView.count 瀑布流插件&#xff…