Educoder_数据可视化(1)_科学计算可视化

目录

什么是科学计算可视化?

第1关:绘制直角坐标系

编程要求

第2关:绘制带标签的余弦曲线散点图

编程要求

第3关:在多个坐标系中绘制图形并显示

相关知识

编程要求

第4关:绘制三维图形

编程要求


什么是科学计算可视化?

科学计算可视化也称为可视化,其定义为:“可视化是一种计算方法,它将符号或数据转换为直观的几何图形,便于研究人员观察其模拟和计算过程。可视化包括了图像综合,这就是说,可视化是用来解释输入到计算机中的图像数据,并从复杂的多维数据中生成图像的一种工具。”

科学计算可视化的实现可以大大加快数据的处理过程,使每日每时都在产生的庞大数据得到有效的利用;可以在人与数据、人与人之间实现图象通信,而不是文字通信或数字通信;可以使科学家们了解到在计算过程中发生了什么现象, 并可改变参数, 观察其影响 , 对计算过程实现引导和控制。总之,可 使科学计算的 工具和环境进一步现代化。

Python中用于科学计算可视化的模块非常多。其中numpy模块是科学计算包,提供了Python中没有的数组对象,支持数组运算、线型代数以及随机数生成等功能。matplotlib是比较常用的绘图模块,可以快速地将各种计算结果以各种图形形式展示出来。

本实训项目的主要内容是基于Python语言进行科学数据的图形绘制,从四个方面介绍科学计算可视化的相关知识,并设置了四个关卡在线考察大家利用科学数据进行图形绘制的能力。


第1关:绘制直角坐标系

matplotlib是提供数据绘图功能的库,是计算结果可视化的重要工具,其子库pyplot主要用于实现各种数据的展示图形的绘制。所以,我们先学习使用matplotlib.pyplot库绘制直角坐标系。

导入库

matplotlib.pyplotmatplotlib的子库,引用方式如下:

import matplotlib.pyplot as plt

改变后续代码的命名空间,有助于提高代码可读性。在后续程序中,用plt代替matplotlib.pyplot

设置直角坐标系的x,y轴

plt.xlim(xmin,xmax) #设置当前x轴的取值范围
plt.ylim(ymin,ymax) #设置当前y轴的取值范围
参数说明: xmin、ymin为x,y轴取值范围的最小值 
          xmax、ymax为x,y轴取值范围的最大值

打开或关闭坐标网格

plt.grid(‘on’/’off’)
参数说明: ‘on’表示打开坐标网格 
          ‘off’表示关闭坐标网格

显示创建的绘图对象

plt.show()

编程要求

本关的任务是实现直角坐标系的绘制。具体要求如下:

  1. 导入matplotlib.pyplot库,重命名为plt
  2. 设置坐标系x,y轴的取值范围为0-100
  3. 开启坐标网格
  4. 显示创建的绘图对象
#**********begin**********#
#绘制直角坐标系
#导入matplotlib.pyplot库,重命名为plt
import matplotlib.pyplot as plt

def level1():
    #创建10*10的绘图区域
    plt.figure(figsize=[10,10])
    # 设置坐标系x,y轴的取值范围为0-100
    plt.xlim(0,100)
    plt.ylim(0,100)
    #开启坐标网格
    plt.grid('on')
    #将绘制的图形保存为指定路径下的图片
    plt.savefig("task1/image1/t1.png")
    #显示创建的绘图对象
    plt.show()
#**********end**********#

第2关:绘制带标签的余弦曲线散点图

数组

数组是一种由同种类型的元素构成的有序的集合,其中的元素类可以用整数索引,可以随时添加和删除,是最常用的数据类型。 一维数组由对等的有序数据构成,是线性结构,主要用Python 二维数组由多个一维数组构成,可以看成一维数组的组合形式,可以采用二维列表来表示。

示例如下:

array1=[1,5,7,9] #一维数组可以采用一个列表变量表示
array2=[[3,5,’6’,9],[1,4,’5’,8],[2,5,’7’,8]] 
#二维数组可以采用二维列表变量表示,每个列表中第三个元素是字符串类型

numpy库定义的常用的数组创建函数和三角函数

arange(start,end,i)函数:创建一个由starend,以i为步长的数组。

linspace(start,end,n)函数:创建一个由startend,等分成n个元素的数组。 sin(x)函数:求x的正弦值。 cox(x)函数:求x的余弦值。 tan(x)函数:求x的正切值。 pi:常量π

示例如下:

import numpy as np #导入numpy模块,在程序的后续部分以np代替numpy
x=np.arange(0,2*np.pi,0.1) #生成一个数组x,0-2π间,以0.1为步长(生成的数组等同于np.array([0,2,4,6,8],x的值为[0 2 4 6 8])
y=np.sin(x) #对数组x中的所有元素求正弦值,得到新数组y(若代入上述x的值,新数组y即[0. sin(2) sin(4) sin(6) sin(8)])

matplotlib.pyplot子库

matplotlib.pyplot子库依赖于numpy模块,可以绘制多种形式的图形,包括散点图、线图、饼状图和直方图等。

matplotlib.pyplot子库定义了标签设置函数和基础图标函数:

title(s)函数:设置坐标系标题。参数s为字符串类型。

xlabel(s)函数:设置当前x轴的标签。参数s为字符串类型。

ylabel(s)函数:设置当前y轴的标签。参数s为字符串类型。

scatter(x,y)函数:绘制散点图,其中x,y是相同长度的数组序列。

编程要求

使用numpy库和matplotlib库绘制带英文标签的余弦曲线散点图,要求如下:

1.导入numpy库,并命名为np

2.设置坐标系标题为cos(x),横轴标签为x,纵轴标签为y

3.绘制y=cos(x),其中数组x中的元素在0-2π间,以0.1为步长。

#绘制带标签的余弦曲线散点图
import matplotlib.pyplot as plt
# **********begin**********#
#导入numpy库
import numpy as np
def level2():
    plt.figure(figsize=(10, 10))    
    #绘制坐标系标题
    plt.title("cox(x)")
    #设置x轴标签
    plt.xlabel("x")
    #设置y轴标签
    plt.ylabel("y")
    #创建一个数组x,0-2π间,以0.1为步长
    x = np.arange(0,2*np.pi,0.1)
    #对数组x中的所有元素求正弦值,得到新数组y
    y = np.cos(x)
    #将y=cos(x)以散点图的形式展示出来
    plt.scatter(x,y)
# **********end**********#
    # 将绘制的图形保存为指定路径下的图片
    plt.savefig("task2/image1/t2.png")
    #显示散点图
    plt.show()

第3关:在多个坐标系中绘制图形并显示

本关任务:创建22列的绘图区域,分别绘制点图、虚线图和连线图。

相关知识

matplotlib.pyplot子库定义了一些绘图函数:

subplot(rows,cols,plot_number)函数:把全局绘图区域分割成rows行*cols列的网格,并选择第plot_number个子绘图区域。

plot(x,y,color,linewidth,linestyle)函数:根据x,y数组绘制直、曲线,color表示曲线的颜色,linewidth表示曲线的宽度,linestyle表示曲线的线型。 常用颜色参数如下表所示:

Educoder_数据可视化(1)_科学计算可视化_第1张图片

常用线型参数如下表所示:

Educoder_数据可视化(1)_科学计算可视化_第2张图片

示例如下:

import matplotlib.pyplot as plt #导入matplotlib.pyplot子模块,在程序的后续部分以plt代替matplotlib.pyplot
x=[2,5] #用列表表示数组x
y=[4,8] #用列表表示数组y
plt.subplot(2,1,1) #将整个绘图区域分割成2行1列的网格,并在第一个位置绘制一个坐标系

呈现下面的效果:

Educoder_数据可视化(1)_科学计算可视化_第3张图片

plt.plot(x,y,color=’r’,linewidth=5,linestyle=’-’) #根据x,y数组绘制红色曲线,宽度为5,线型为实线

呈现下面的效果:

Educoder_数据可视化(1)_科学计算可视化_第4张图片

编程要求

22列的绘图区域中绘制连线、虚线和点图,要求如下:

1.x为一个数组,在0-2π间,等分成500个元素。

2.在第一位置绘制y=sin(x),实线;第二个位置绘制y=cos(x),红色,虚线;第三个位置绘制y=sin(πx),点线,绿色,宽度为3。第四个位置绘制一个空坐标系。

#绘制多个图形并单独显示
import numpy as np
import matplotlib.pyplot as plt
def level3():
    plt.figure(figsize=(10,10))
    #**********begin**********#
    #生成一个数组x,在0-2π间,等分成500个元素。
    x = np.linspace(0,2*np.pi,500)
    #y1=sin(x)
    y1 = np.sin(x)
    #y2=cos(x)
    y2 = np.cos(x)
    #y3=sin(πx)
    y3 = np.sin(np.pi*x)
    #选择第一行第一列图形
    plt.subplot(2,2,1)
    #绘制y1=sin(x),用蓝色点线
    plt.plot(x,y1,color='b',linestyle='-')
    # 选择第一行第二列图形
    plt.subplot(2,2,2)
    #绘制y2=cos(x),红色,虚线
    plt.plot(x,y2,color='r',linestyle='--')
    #选择第二行第一列图形
    plt.subplot(2,2,3)
    #绘制y3 = sin(πx), 绿色,宽度为3
    plt.plot(x,y3,color='g',linewidth=3,linestyle=':')
    #选择第二行第一列图形
    plt.subplot(2,2,4)
    #**********end**********#
    #将绘制的图形保存为指定路径下的图片
    plt.savefig("task3/image1/t3.png")
    #显示创建的绘图对象
    plt.show()

第4关:绘制三维图形

mpl_toolkits.mplot3dMatplotlib里面专门用来画三维图的工具包,导入该库,即可绘制三维图形。 如果要绘制三维图形,首先需要使用下面的语句导入相应的对象:

import mpl_toolkits.mplot3d 然后使用下面的方法创建三维子图: ax=plt.subplot(projection='3d') 接下来就可以使用axplot()方法绘制三维曲线、plot_surface()方法绘制三维曲面、scatter()方法绘制三维散点图。

绘制三维曲线的方法plot()

代码示例如下: 导入库

import numpy as np
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d

绘制三维坐标系

ax=plt.subplot(111,projection='3d')

生成绘图数据

x=np.linspace(0,2*np.pi,300)
y=np.linspace(0,3*np.pi,300)
z=50*np.sin(x+y)

绘制三维曲线

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

上述代码呈现下面的效果:

Educoder_数据可视化(1)_科学计算可视化_第5张图片

绘制三维曲面的方法plot_surface()

plot_surface(X, Y, Z, rstride,cstride,color) 参数说明: X,Y,Z:指定三个坐标轴的数据。 rstride,cstride:分别控制xy两个方向的步长,这决定了曲面上每个面片的大小。 color:用来指定面片的颜色

绘制三维散点图的方法scatter(x,y,z,color)

参数说明: x,y,z: 指定散点符号的xyz坐标 color:用来指定散点的颜色

生成随机数的方法numpy库中的random.randint(a,b,c)

参数说明: a:生成随机数的下限。 b:生成随机数的上限。 c:随机数的个数。

一维数组元素切片方法array[start:end:step]

功能:获取一维数组array中从startend(不包括end)以step为步长所对应元素组成的数组。 step可省略,默认为1。 代码示例如下:

>>array = np.arange(10) #生成0-9,步长为1的数组
>>print(array)
>>[0 1 2 3 4 5 6 7 8 9] #数组元素
>> print(array[3:5]) #获取索引从3到5的数组元素组成的数组
>>[3 4]

编程要求

22列的绘图区域中绘制三维曲线、曲面和散点点图,要求如下:

1.在第一个绘图区域绘制一条给定数据的三维曲线;

2.在第二个绘图区域绘制一条z=50*sin(x+y)三维曲面,x,y两个方向的步长分别为2,3

3.在第三个绘图区域绘制三维散点图,x,y,z三个坐标轴的数值分别0-50之间的30个随机数。30个点中,前10个点红色,中间10个点蓝色,最后10个点黄色。

import numpy as np
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d
def level4():
    #绘制三维曲线
    plt.figure(figsize=(10, 10))
    #**********begin**********#
    #绘制三维坐标系
    ax1 = plt.subplot(221,projection='3d')
    #生成绘图数据
    x1=np.linspace(0,2*np.pi,300)
    y1=np.linspace(0,3*np.pi,300)
    z1=50*np.sin(x1+y1)
    #绘制曲线
    ax1.plot(x1,y1,z1)
    
    #绘制三维曲面
    #绘制三维坐标系
    ax2 = plt.subplot(222,projection='3d')
    #生成绘图数据
    x2,y2=np.mgrid[-2:2:20j,-2:2:20j]
    z2=50*np.sin(x2+y2)
    #绘制曲面
    ax2.plot_surface(x2,y2,z2,rstride=2,cstride=3)

    #绘制三维散点图
    #绘制三维坐标系
    ax3 = plt.subplot(223,projection='3d')
    #生成绘图数据
    x3 = np.random.randint(0,50,30)
    y3 = np.random.randint(0,50,30)
    z3 = np.random.randint(0,50,30)
    #按区域绘制不同颜色散点
    ax3.scatter(x3[0:10],y3[0:10],z3[0:10],color='r')
    ax3.scatter(x3[10:20],y3[10:20],z3[10:20],color='b')
    ax3.scatter(x3[20:30],y3[20:30],z3[20:30],color='y')

    #**********end**********#
    #将绘制的图形保存为指定路径下的图片
    plt.savefig("task4/image1/t4.png")
    #显示创建的绘图对象
    plt.show()

 

你可能感兴趣的:(数据可视化,头歌educoder,python,matplotlib,numpy)