数据可视化---动画模块

题目一:基于FuncAnimation类绘制正弦曲线移动的动图

编写程序。根据第7章7.2.1,基于FuncAnimation类绘制正弦曲线移动的动图

运行代码:

#基于FuncAnimation类绘制正弦曲线移动的动图
from matplotlib.animation import FuncAnimation
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(0, 2*np.pi, 0.01)
fig, ax = plt.subplots()
line, = ax.plot(x, np.sin(x))
def animate(i):#定义每帧动画的函数
    line.set_ydata(np.sin(x+i/10.0))
    return line,
def init():#定义初始化帧函数
    line.set_ydata(np.sin(x))
    return line,
ani = FuncAnimation(fig=fig, func=animate, frames=100, init_func=init, interval=20, blit=False)
#plt.tight_layout() #tight_layout() 会尝试调整子图的位置,使它们更好地适应画布的大小,同时减少重叠并保持子图之间的合理间距。
plt.show()

运行结果:

会动的正弦曲线。

题目二:基于ArtistAnimation类绘制正弦曲线移动的动图

编写程序。根据第7章7.2.1,基于ArtistAnimation类绘制正弦曲线移动的动图

运行代码:

#基于ArtistAnimation类绘制正弦曲线移动的动图
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.animation import ArtistAnimation
x = np.arange(0, 2*np.pi, 0.01)
fig, ax = plt.subplots()
arr = []
for i in range(5):
    line = ax.plot(x, np.sin(x+i))
    arr.append(line)
#根据arr存储的一组图形创建动画
ani = ArtistAnimation(fig=fig, artists=arr, repeat=True)
plt.show()

运行结果:

颜色不断变化的动的正弦曲线。

题目三:绘制一个带有动画效果的3D散点图

编写程序。根据实例2的要求,绘制一个带有动画效果的3D散点图,实现过程如下:

  1. 导入numpy模块、matplotlib.pyplot模块、FuncAnimation类、Axes3D类;
  2. 准备数据;
  3. 绘制一个3D散点图;
  4. 定义动画函数animate()和初始化帧的函数init();
  5. 创建FuncAnimation类的对象,指定每帧动画调用的函数为animate();
  6. 设置x、y、z轴的标签为“x轴”、“y轴”、“z轴”;
  7. 设置3D图表的标题为“3D散点图”。

运行代码:

#绘制一个带有动画效果的3D散点图
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib.animation import FuncAnimation
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False
#生成测试数据
xx = np.array([13, 5, 25, 13, 9, 19, 3, 39, 13, 27])
yy = np.array([4, 38, 26, 36, 7, 19, 28, 10, 17, 18])
zz = np.array([7, 19, 6, 12, 25, 19, 23, 25, 10, 15])
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
#绘制初始的3d散点图
star = ax.scatter(xx, yy, zz, c='red', marker='*', s=160, linewidth=1, edgecolor='black')
#每帧动画调用的函数
def animate(i):
    if i % 2:
        color = "#C71585"
    else:
        color = "white"
    next_star = ax.scatter(xx, yy, zz, c=color, marker='*', s=160, linewidth=1, edgecolor='black')
    return next_star
def init():
    return star
ani = FuncAnimation(fig=fig, func=animate, frames=None, init_func=init, interval=1000, blit=False)
ax.set_xlabel('x轴')
ax.set_ylabel('y轴')
ax.set_zlabel('z轴')
ax.set_title('3D散点图', fontproperties='simhei', fontsize=14)
plt.tight_layout()
plt.show()

运行结果:

题目四:绘制展示美国部分城镇人口分布的统计地图

编写程序。根据实例3的要求,绘制展示美国部分城镇人口分布的统计地图,实现过程如下:

  1. 导入numpy模块、pandas模块、matplotlib模块、Basemap类;
  2. 创建Basemap类的对象map;
  3. 绘制边界、州界、海岸线、国家边界;
  4. 绘制纬线、经线;
  5. 在地图背景上绘制气泡。

运行代码:

#2014年美国部分城镇的人口分布情况
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False
#创建Basemap对象
map = Basemap(projection='stere', lat_0=90, lon_0=-105, llcrnrlat=23.41, urcrnrlat=45.44,
              llcrnrlon=-118.67, urcrnrlon=-64.52, rsphere=6371200., resolution='l',
              area_thresh=10000)

map.drawmapboundary() #绘制地图投影周围边界
#map.fillcontinents()   # 填充大陆,发现填充之后无法显示散点图,应该是被覆盖了
map.drawstates() #绘制州界
map.drawcoastlines() #绘制海岸线
map.drawcountries() #绘制国家边界
#map.drawcounties()      # 绘制县

#绘制纬线
parallels = np.arange(0., 90, 10.)
map.drawparallels(parallels, labels=[1, 0, 0, 0], fontsize=10)
#绘制经线
meridians = np.arange(-110., -60., 10.)
map.drawparallels(meridians, labels=[1, 0, 0, 0], fontsize=10)
posi = pd.read_csv('D:\\数据可视化\\12\\2014_us_cities.csv')
#从3228组城市数据中选500组数据
lat = np.array(posi["lat"][0:500])#获取纬度值
lon = np.array(posi['lon'][0:500])#获取经度值
pop = np.array(posi['pop'][0:500], dtype=float)#获取人口数
#气泡图的气泡大小
size = (pop/np.max(pop))*1000
x, y = map(lon, lat)
map.scatter(x, y, s = size)
plt.title('2014年美国部分城镇的人口分布情况')
plt.show()

运行结果:

题目五:绘制三维等高线图

编写程序。绘制三维等高线图,效果如下。

运行代码:

#绘制三维等高线
import numpy as np
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

#定义坐标轴
fig4 = plt.figure(figsize=(13, 9))
ax4 = plt.axes(projection='3d')
#生成三维数据
xx = np.arange(-6, 6, 0.1)
yy = np.arange(-6, 6, 0.1)
X, Y = np.meshgrid(xx, yy)
Z = np.sin(np.sqrt(X**2 + Y**2))
#绘制图形
ax4.plot_surface(X, Y, Z, alpha=0.8, cmap='winter')
ax4.contour(X, Y, Z, zdir='z', offset=-3, cmap='rainbow')
#设定显示范围
ax4.set_xlabel('X', size=16)#设置坐标轴标签及字体大小
ax4.set_xlim(-6, 6)
ax4.set_ylabel('Y', size=16)#设置坐标轴标签及字体大小
ax4.set_ylim(-6, 6)
ax4.set_zlabel('Z', size=16)#设置坐标轴标签及字体大小
ax4.set_zlim(-6, 6)
#设置刻度值的字体大小
plt.tick_params(labelsize=13)
plt.show()

运行结果:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值