大数据可视化实验(七):Python数据可视化

目录

一、实验目的... 1

二、实验环境... 1

三、实验内容... 1

1)绘制带颜色的柱状图。.. 1

2)绘制堆叠柱状图。.. 3

3)绘制数学函数曲线图。.. 4

4)使用seaborn绘制组合图形。... 5

5)使用Boken绘制多个三角形图。.. 7

6)使用pyqtgraph绘制曲线图。... 8

7)使用Numpy和matplotlib在一张图中绘制多种图形。.. 10

四、思考问题... 13

五、总结与心得体会... 13

一、实验目的

了解大数据可视化的特点,能进行简单的与大数据可视化有关的操作,能够绘制不同的可视化图表。

二、实验环境

硬件:微型图像处理系统,

包括:主机, PC机;

操作系统:Windows 11        

应用软件:Jupyter Notebook, pycharm

数字图像处理软件:Excel/Python

三、实验内容

1)绘制带颜色的柱状图。

编写如下代码:

import matplotlib.pyplot as plt
# 设置中文支持
plt.rcParams['font.sans-serif'] = ['SimHei'# 'SimHei' 是黑体的意思
plt.rcParams['axes.unicode_minus'] = False  # 正确显示负号
#
定义x轴的位置
x = [1, 2, 3, 4, 5]

# 定义每个柱子的高度
heights = [5, 10, 15, 20, 25]

# 定义每个柱子的颜色,这里使用一个颜色列表
colors = ['red', 'green', 'blue', 'purple', 'orange']

# 绘制柱状图,'align="center"' 表示柱子在x轴的位置居中对齐
plt.bar(x, heights, color=colors, align="center")

# 添加标题
plt.title('我的带颜色柱状图')

# 添加x轴标签
plt.xlabel('X')

# 添加y轴标签
plt.ylabel('Y')

# 显示结果
plt.show()

这段代码中:

导入matplotlib.pyplot模块。

定义了x轴的位置列表x。

定义了柱状图的高度列表heights。

定义了柱状图的颜色列表colors,列表中的每个颜色将分别应用于相应的柱子。

使用plt.bar函数绘制柱状图,其中color=colors参数将上面定义的颜色列表应用到每个柱子上。

使用plt.title,plt.xlabel,和plt.ylabel分别添加图表的标题和x、y轴的标签。

使用plt.show()函数显示图表。

运行结果如下:

2)绘制堆叠柱状图。

编写如下代码:

import matplotlib.pyplot as plt
import numpy as np
# 设置中文支持
plt.rcParams['font.sans-serif'] = ['SimHei'# 'SimHei' 是黑体的意思
plt.rcParams['axes.unicode_minus'] = False  # 正确显示负号
#
定义分类和每类中的数值
categories = ['A', 'B', 'C', 'D']
values_type1 = [5, 10, 15, 20]
values_type2 = [3, 9, 12, 10]

# 计算第一个类型的柱状图的底部位置(即累积值)
bottom_values_type1 = np.array(values_type1).cumsum()

# 初始化底部值为第一个类别的底部高度为0
bottom_values = [0] + list(bottom_values_type1)

# 绘制第一个类型的柱状图
plt.bar(categories, values_type1, label='Type 1', width=0.4, align='edge')

# 绘制第二个类型的柱状图,堆叠在第一个上面
#
注意:这里不再使用bottom参数,因为底部高度已经通过累积和计算
plt.bar(categories, values_type2, label='Type 2', width=0.4, align='edge')

# 添加图例
plt.legend()

# 添加标题和轴标签
plt.title('我的堆叠条形图')
plt.xlabel('目录')
plt.ylabel('')

# 显示结果
plt.show()

运行结果如下:

3)绘制数学函数曲线图。

绘制正弦余弦图,编写如下代码:

from bokeh.plotting import figure, output_file, show
import numpy as np
output_file("sincos.html")
x=np.linspace(-np.pi,np.pi,100)
y=np.sin(x)
z=np.cos(x)
p=figure(plot_width=400,plot_height=400)
p.line(x,y)
p.line(x,z)
show(p)

运行结果如下:

4)使用seaborn绘制组合图形。

编写如下代码:


import seaborn as sns
import matplotlib.pyplot as plt


plt.rcParams['font.sans-serif'] = ['SimHei'# 中文字体设置-黑体
plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题
sns.set(font='SimHei', style='white', )  # 解决Seaborn中文显示问题

#
取出作图的数据
y1 = [4088, 2451, 3896, 2921, 3116, 3189, 2697, 1380] # 发病数
y2 = [30, 15, 20, 24, 20, 16, 6, 4]   #死亡数
x = [2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018]

# 设置图形大小
plt.rcParams['figure.figsize'] = (12.0, 8.0)
fig = plt.figure()


# 画柱形图
ax1 = fig.add_subplot(111)
ax1.set_ylim([0, 4500])
ax1.bar(x, y1, alpha=0.7, color='k')
ax1.set_ylabel(u'发病数', fontsize='20')
# ax1.set_xlabel(u'年份', fontsize='20')
ax1.tick_params(labelsize=15)
for i, (_x, _y) in enumerate(zip(x, y1)):
    plt.text(_x, _y, y1[i], color='black', fontsize=20, ha='center', va='bottom'# 将数值显示在图形上
# ax1.set_title(u"2011-2018
年中国疟疾发病数与死亡数", fontsize='20')


#
画折线图
ax2 = ax1.twinx()  # 组合图必须加这个
ax2.set_ylim([0, 35])     
ax2.plot(x, y2, 'r', ms=10, lw=3, marker='o') # 设置线粗细,节点样式
ax2.set_ylabel(u'死亡数', fontsize='20')
sns.despine(left=True, bottom=True)   # 删除坐标轴,默认删除右上
ax2.tick_params(labelsize=15)
for x, y in zip(x, y2):   # # 添加数据标签
   
plt.text(x, y-2.5, str(y), ha='center', va='bottom', fontsize=20, rotation=0)

plt.show()

运行结果如下:

5)使用Boken绘制多个三角形图。

编写代码如下:

from bokeh.plotting import figure, output_file, show
output_file("patch.html")
p = figure(plot_width=400, plot_height=400)
p.patch([1, 3, 5], [5, 8, 5], alpha=0.5, line_width=2)
p.patch([2, 3, 4], [5.5, 7, 5.5], alpha=0.3, line_width=2)
show(p)

这段代码使用了Python的Bokeh库来创建并展示两个带有透明度和线条宽度的图形补丁(patches)。Bokeh是一个强大的交互式可视化库,它可以用来生成复杂的图表和图形,并且可以集成到Web应用程序中。下面是代码的详细解释:

frombokeh.plottingimportfigure,output_file,show:从bokeh.plotting模块导入figure,output_file,和show函数。

figure用于创建一个新的Bokeh图形对象。

output_file用于指定将要生成的HTML文件的名称,这个文件将包含渲染的图表。

show用于显示一个Bokeh图形对象。

output_file("patch.html"):这行代码设置了输出文件的名称。当你运行这段代码时,Bokeh将会生成一个名为"patch.html"的文件,其中包含了渲染的图形。

p=figure(plot_width=400,plot_height=400):创建一个新的Bokeh图形对象p,并设置图形的宽度和高度为400像素。

p.patch([1,3,5],[5,8,5],alpha=0.5,line_width=2):使用p.patch方法在图形上绘制第一个多边形补丁。

第一个参数[1,3,5]是x坐标列表。

第二个参数[5,8,5]是y坐标列表。

alpha=0.5设置了补丁的透明度,0是完全透明,1是完全不透明。

line_width=2设置了多边形边缘线条的宽度。

p.patch([2,3,4],[5.5,7,5.5],alpha=0.3,line_width=2):同样使用p.patch方法绘制第二个多边形补丁,其参数与第一个类似,但透明度和坐标点不同。

show(p):显示图形对象p。这将打开一个Web浏览器窗口,展示由p定义的图形。在JupyterNotebook环境中,show函数还可以内联显示图表。

运行这段代码后,将会生成一个包含两个半透明多边形补丁的HTML文件"patch.html"。这些补丁叠加在同一个坐标轴上,各自具有不同的透明度和线条宽度,展示了Bokeh在图形渲染方面的灵活性和定制能力。

运行结果如下:

6)使用pyqtgraph绘制曲线图。

编写代码如下:

import pyqtgraph as pg
import numpy as np
app=pg.mkQApp()
x=np.linspace(2,10*np.pi,100)
z=np.cos(x)
pg.plot(x,z)
app.exec_()

这段代码使用了pyqtgraph库来创建一个简单的应用程序,该程序绘制了一个余弦波形图。pyqtgraph是一个基于Qt的图形库,它提供了丰富的数据可视化工具,特别适合实时数据更新和交互式图表。下面是代码的详细解释:

importpyqtgraphaspg:导入pyqtgraph库,并给它起一个别名pg,这样你就可以通过pg来访问库中的函数和类。

importnumpyasnp:导入numpy库,并给它起一个别名np。numpy是一个用于科学计算的库,它提供了大量的数学函数和对多维数组的支持。

app=pg.mkQApp():创建一个Qt应用程序实例。在pyqtgraph中,你需要一个Qt应用程序的上下文来使用图形和窗口。pg.mkQApp()会检查是否已经有一个Qt应用程序在运行,如果有,它会返回那个应用程序的实例;如果没有,它会创建一个新的应用程序实例。

x=np.linspace(2,10*np.pi,100):使用numpy的linspace函数生成一个等间隔的数组。

2是数组的起始值。

10*np.pi是数组的结束值。

100是数组中的元素数量。这个函数会生成从2到20π(约等于62.8318)的100个等间隔的点。

z=np.cos(x):计算数组x中每个点的余弦值,并将结果存储在数组z中。这样,z就包含了对应x值的余弦波形的y坐标。

pg.plot(x,z):使用pyqtgraph的plot函数创建一个图形窗口并绘制图形。

第一个参数x是图形的x轴数据。

第二个参数z是图形的y轴数据,即余弦波形。

app.exec_():进入Qt应用程序的主循环。这行代码会启动应用程序的事件循环,等待用户与图形窗口进行交互,例如关闭窗口。在JupyterNotebook环境中,你可能需要使用%guiqt魔法命令来确保图形可以正确显示。

运行这段代码后,会出现一个窗口,显示了一个从2到20π的余弦波形图。用户可以关闭这个窗口,或者与图形进行交互,如缩放和平移。这段代码展示了如何使用pyqtgraph和numpy快速创建一个基本的实时更新的交互式图表。

运行结果如下:

7)使用Numpy和matplotlib在一张图中绘制多种图形。

编写以下代码:

import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y =2*np.cos(x)**5 + 3*np.sin(x)**3
#定义画布和子图数量
fig,axes=plt.subplots(2,3,figsize=(10,6),facecolor='#ccddef')
#添加整个画布的标题
fig.suptitle('Photo',fontsize=20)
#利用text属性添加副标题
#
折线图
axes[0,0].plot(x,y)
#柱状图
axes[0,1].bar(x,y*y)
#直方图
axes[0,2].hist(y,bins=30)
#散点图
axes[1,0].scatter(x,y)
#条形图
axes[1,1].barh(x,y)
#饼图
axes[1,2].pie([1,2,3,4,5],labels=['A','B','C','D','E'])
#对子图进行详细设置
ax1=axes[0,0]
#设置子图的xy轴范围,子图标题,标签背景颜色等
ax1.set(xlim=[-10,12],ylim=[-6,4], facecolor='#ffeedd')
#添加网格
ax1.grid(True)
#调整图表位置和间距
fig.subplots_adjust(left=0.2, bottom=0.1, right=0.8, top=0.8,hspace=0.5)
plt.show()

这段代码使用了matplotlib库,一个非常流行的Python绘图库,来创建一个包含多个子图的复杂图表。下面是代码的详细解释:

importmatplotlib.pyplotasplt:导入matplotlib.pyplot模块,并给它起一个别名plt,这是matplotlib中用于绘图的模块。

importnumpyasnp:导入numpy库,并给它起一个别名np,用于进行数学运算。

x=np.linspace(0,10,100):使用numpy的linspace函数生成一个包含100个从0到10均匀分布的数值的数组。

y=2*np.cos(x)**5+3*np.sin(x)**3:根据x的值计算y的值。这里y是由余弦函数和正弦函数经过变换后相加得到的。

fig,axes=plt.subplots(2,3,figsize=(10,6),facecolor='#ccddef'):使用plt.subplots创建一个2行3列的子图网格。figsize设置了整个图表的大小,facecolor设置了图表的背景颜色。

fig.suptitle('Photo',fontsize=20):为整个图表添加一个主标题"Photo"。

axes[0,0].plot(x,y):在第一个子图(0,0)上绘制x和y的折线图。

axes[0,1].bar(x,y*y):在第二个子图(0,1)上绘制x和y*y的柱状图。

axes[0,2].hist(y,bins=30):在第三个子图(0,2)上绘制y的直方图,bins=30表示将直方图分成30个箱子。

axes[1,0].scatter(x,y):在第四个子图(1,0)上绘制x和y的散点图。

axes[1,1].barh(x,y):在第五个子图(1,1)上绘制x和y的水平柱状图。

axes[1,2].pie([1,2,3,4,5],labels=['A','B','C','D','E']):在第六个子图(1,2)上绘制一个饼图,饼图由5个部分构成,每个部分的数值分别为1到5。

ax1=axes[0,0]:获取第一个子图的引用。

ax1.set(xlim=[-10,12],ylim=[-6,4],facecolor='#ffeedd'):对第一个子图进行详细设置,包括设置坐标轴的范围、标题、标签以及背景颜色。

ax1.grid(True):为第一个子图添加网格线。

fig.subplots_adjust(left=0.2,bottom=0.1,right=0.8,top=0.8,hspace=0.5):调整子图之间的间距,left、bottom、right、top分别设置子图与图表边缘的距离,hspace设置子图之间的水平间距。

plt.show():显示图表。在JupyterNotebook中,这会导致图表内联显示。在Python脚本中,这将打开一个窗口来显示图表。

运行这段代码后,会显示一个包含6个不同类型图表的窗口,每个图表都根据其数据和类型进行了特定的设置和样式定制。这个例子很好地展示了matplotlib的灵活性和强大的绘图能力。

运行结果如下:

四、思考问题

Python软件功能强大,除了上述要实现的功能,大家可以自己进行扩展。

五、总结与心得体会

无。

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

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

相关文章

63.ThreadLocal原理

JDK8中ThreadLocal的设计 每个Thread维护一个ThreadLocalMap,这个map的key是ThreadLocal实例本身,value才是真正要存储的值Object。 Thread -> ThreadLocalMap -> <ThreadLocal实例对象, 变量副本> jdk早期设计 ThreadLocal -> ThreadLocalMap -> <T…

vmware安装debian11

安装vmware16 下载镜像 https://repo.huaweicloud.com/debian-cd/ https://repo.huaweicloud.com/debian-cd/11.7.0/amd64/iso-dvd/ 安装 安装完成之后重启&#xff0c;输入账号密码进入&#xff0c;安装ssh服务器即可使用

ManicTime(屏幕时间统计工具) 专业版值得购买吗

ManicTime 是 Windows 平台上&#xff0c;一款支持跟踪、标记用户在每个软件上所花时间的工具&#xff0c;它能自动归类生成时间使用报表&#xff0c;帮助用户分析及改善工作效率。 ManicTime 不仅会在后台记录、统计所有窗口的使用时间&#xff0c;还能自动截图存档到本地&a…

设计模式 - 原型模式,就该这样学!

目录 开始 为什么要引入原型模式 原型模式概述 原型模式代码实现&#xff08;浅拷贝&#xff09; 浅拷贝和深拷贝的区别 原型模式代码实现&#xff08;深拷贝&#xff09; 方式一&#xff1a;直接 copy 方式二&#xff1a;序列化和反序列化&#xff08;推荐&#xff09…

LeetCode 1527, 54,114

目录 1527. 患某种疾病的患者题目链接表要求知识点思路代码 54. 螺旋矩阵题目链接标签思路代码 114. 二叉树展开为链表题目链接标签前序遍历思路代码 前驱思路代码 1527. 患某种疾病的患者 题目链接 1527. 患某种疾病的患者 表 表Patients的字段为patient_id、patient_name…

C++ | Leetcode C++题解之第205题同构字符串

题目&#xff1a; 题解&#xff1a; class Solution { public:bool isIsomorphic(string s, string t) {unordered_map<char, char> s2t;unordered_map<char, char> t2s;int len s.length();for (int i 0; i < len; i) {char x s[i], y t[i];if ((s2t.coun…

Webpack: 7 款常用的性能分析工具

概述 Webpack 最大的优势在于它的功能非常强大、全面&#xff0c;加之繁荣活跃的组件生态&#xff0c;已经足够应对几乎所有 Web 构建需求&#xff0c;包括&#xff1a;SPA、MPA、SSR、桌面应用、Node 程序、WebAssemsbly、PWA、微前端等等&#xff0c;所以即使在近几年工程化…

Python | Leetcode Python题解之第205题同构字符串

题目&#xff1a; 题解&#xff1a; class Solution:def isIsomorphic(self, s: str, t: str) -> bool:dicts Counter(s)dictt Counter(t) if list(dicts.values()) ! list(dictt.values()):return Falsefor i in range(len(s)):inds list(dicts.keys()).index(s…

C#语言编写的仅有8KB大小的简易贪吃蛇开源游戏

前言 今天大姚给大家分享一款由C#语言编写的仅有8KB大小的简易贪吃蛇开源游戏&#xff1a;SeeSharpSnake。 项目特点 该仓库中的项目文件和脚本可以用多种不同的配置构建相同的游戏&#xff0c;每个配置生成的输出大小也不同。 项目源码运行 F5 运行 SeeSharpSnake项目&…

E4A视频APP源码电视盒子Coolpoint酷点电视4.5版后端苹果cms

电视盒子酷点TV版4.5影视APP源码后端对接苹果CMS&#xff0c;此版带会员功能,对接的是 如意验证1.71版苹果cms后端APP 电视TV4.5版,会员功能带注册邀请,绑定邮箱,邮箱找回密码,修改新密码,卡密充值,签到,积分兑换会员&#xff1b; 自带10个解析线路,有电视直播功能,首页滚动公…

Java教程之IO模式精讲,NIO+BIO

第一章 BIO、NIO、AIO介绍 背景 在java的软件设计开发中&#xff0c;通信架构是不可避免的&#xff0c;我们在进行不同系统或者不同进程之间的数据交互&#xff0c;或 者在高并发下的通信场景下都需要用到网络通信相关的技术&#xff0c;对于一些经验丰富的程序员来说&#x…

第11章 规划过程组(11.5创建WBS)

第11章 规划过程组&#xff08;一&#xff09;11.5创建WBS&#xff0c;在第三版教材第380~383页&#xff1b; 文字图片音频方式 视频22 第一个知识点&#xff1a;主要输入 1、项目管理计划 范围管理计划 定义了如何根据项目范围说明书创建WBS2、项目文件 项目范围说明…

十六进制计数器

目录 描述 输入描述&#xff1a; 输出描述&#xff1a; 参考代码 描述 请用Verilog设计十六进制递增计数器电路&#xff0c;每个时钟周期递增1。 电路的接口如下图所示。Q[3:0]中&#xff0c;Q[3]是高位。 接口电路图如下&#xff1a; 输入描述&#xff1a; input …

操作系统期末复习考题三(不挂科系列)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、前言&#x1f680;&#x1f680;&#x1f680;二、正文☀️☀️☀️三、总结&#x1f353;&#x1f353;&#x1f353; 一、前言&#x1f680;&#x1f680;&am…

java基于ssm+jsp 房屋租赁系统

1 管理员登录 管理员输入个人的用户名、密码登录系统&#xff0c;这时候系统的数据库就会在进行查找相关的信息&#xff0c;如果我们输入的用户名、密码不正确&#xff0c;数据库就会提示出错误的信息提示&#xff0c;同时会提示管理员重新输入自己的用户名、密码&#xff0c;…

了解WPF控件:OpenFileDialog常用属性与用法(十六)

掌握WPF控件&#xff1a;熟练OpenFileDialog常用属性&#xff08;十六&#xff09; OpenFileDialog控件在WPF中用于需要用户指定文件路径&#xff0c;为用户提供了一个直观且易用的界面来浏览和选择本地文件系统中的文件。例如&#xff0c;当用户需要打开一个已存在的文本文件…

C++自定义智能指针

template <class T> class counted_ptr;// 智能指针引用计数类 template <class T> class Ref_Ptr {friend class counted_ptr<T>; private:T* m_pTtr; // 实际的指针size_t counted_ptr; // 引用计数Ref_Ptr(T* p);virtual ~Ref_Ptr(); };template <clas…

【Arduino】实验使用ESP32控制可编程继电器制作跑马灯(图文)

今天小飞鱼实验使用ESP控制继电器&#xff0c;为了更好的掌握继电器的使用方法这里实验做了一个跑马灯的效果。 这里用到的可编程继电器&#xff0c;起始原理并不复杂&#xff0c;同样需要ESP32控制针脚输出高电平或低电平给到继电器&#xff0c;继电器使用这个信号控制一个电…

如何焊铜管 量测射频前端模块

先说结论 要做Port Extension待测物要上电 且根据逻辑表给Enable pin上电网分输入功率 不要太大 -20dBm即可铜管的接地 要足够 以及足够近铜管与待测物之间 必要时 隔一颗电容不要将匹配元件 也包含在量测范围讯号针不要直接焊在焊盘上 首先 铜管要做Port…

50-3 内网信息收集 - 域环境搭建

搭建准备: 在搭建准备阶段,我们需要准备三台 Windows 虚拟机:Windows Server 2012、Windows 7 和 Windows Server 2008。接下来,我们将配置 Windows Server 2012 作为域控制器,而 Windows 7 和 Windows Server 2008 将作为成员机加入域。建议保持这三台虚拟机的内存不超过…