python大数据可视化坐标轴的定制与绘制3D图表及统计地图

一、坐标轴的定制
1、概述:
坐标轴及其组成部分对应着matplotlib中一些类的对象︰坐标轴是axis.Axis类的对象,x轴是axis.Xaxis类的对象,y轴是axis.Yaxis类的对象;轴脊是spines.Spine类的对象;刻度是axis.Ticker类的对象。
使用Axes类的对象访问spines属性后,会返回一个OrderedDict类的对象。OrderedDict类是dict的子类,它可以维护添加到字典中键值对的顺序。
2、任意位置添加坐标轴:
matplotlib支持向画布的任意位置添加自定义大小的坐标系统,同时显示坐标轴,而不再受规划区域的限制。通过pyplot模块的axes()函数创建一个Axes类的对象,并将Axes类的对象添加到当前画布中。

axes(arg=None, projection=None. polar=False. aspect.frame on.**kwargs)

还可以使用Figure类对象的add_axes()方法向当前画布的任意位置上添加Axes类对象。
3、刻度定制:
matplotlib.ticker模块中提供了两个类:Locator和Formatter,分别代表刻度定位器和刻度格式器,用于指定刻度线的位置和刻度标签的格式。
刻度定位器Locator是刻度定位器的基类,它派生了很多子类,通过这些子类构建的刻度定位器可以调整刻度的间隔、选择刻度的位置。matplotlib.dates模块中还提供了很多与日期时间相关的定位器。
matplotlib也支持自定义刻度定位器,我们只需要定义一个Locator 的子类,并在该子类中重写__call__()方法即可。
刻度定位器使用matplotlib的set_major_locator()或set_minor_locator()方法设置坐标轴的主刻度或次刻度的定位器。

#创建一个HourLocator定位器,间隔为2小时hour_loc=HourLocator(interval=2)
#将hour_loc设为x轴的主刻度定位器ax.xaxis.set_major_locator(hour_loc)

4、隐藏和移动轴脊:
坐标轴一般将轴脊作为刻度的载体,在轴脊上显示刻度标签和刻度线。matplotlib中的坐标系默认有4个轴脊,分别是上轴脊、下轴脊、左轴脊和右轴脊,其中上轴脊和右轴脊并不经常使用,大多数情况下可以将上轴脊和右轴脊隐藏。
使用pyplot的axis()函数可以设置或获取一些坐标轴的属性,包括显示或隐藏坐标轴的轴脊。

axis(option, *args,**kwargs)

部分轴脊隐藏
matplotlib可以只隐藏坐标轴的部分轴脊,只需要访问spines属性先获取相应的轴脊,再调用set_color()方法将轴脊的颜色设为none即可
移动轴脊
matplotlib的Spine类中提供了一个可以设置轴脊位置的set_position()方法,通过这个方法可以将轴脊放置到指定的位置,以满足一些特定场景的需求。

set position(self, position)

二、绘制3D图表和统计地图
1、mplot3d概述:
matplotlib不仅专注于二维图表的绘制,也具有绘制3D图表、统计地图的功能,并将这些功能分别封装到工具包mpl_toolkits.mplot3d、mpl_toolkits.basemap中,另外可以结合animation模块给图表添加动画效果。
mplot3d是matplotlib中专门绘制3D图表的工具包,它主要包含一个继承自Axes的子类Axes3D,使用Axes3D类可以构建一个三维坐标系的绘图区域。
Axes3D()方法
Axes3D()是构造方法,它直接用于构建一个Axes3D类的对象。

Axes3D(fig, rect=None, *args, azim=-60, elev=30, zscale=None,sharez=None, proj_type='persp'**kwargs)

add_subplot()方法
在调用add subplot()方法添加绘图区域时为该方法传入pro
jection= ‘3d’,即指定坐标系的类型为三维坐标系,并返回一个Axes3D类的对象。

import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3Dfig = plt.figure()
ax = fig.add_ subplot(111, projection='3d')

2、绘制常见的3d图:
常见的3D图表包括3D线框图、3D曲面图、3D柱形图、3D散点图等。Axes3D类中提供了一些绘制3D图表的方法,
绘制3D线框图
Axes3D类的对象使用plot_wireframe()方法绘制线框图。

plot_wireframe(self,X,Y,Z,*args,**kwargs)

绘制3D曲面图
Axes3D类的对象使用plot_surface()方法绘制3D曲面图。

plot_surface(self,X,Y,Z,*args, norm=None, vmin=None, vmax=None,
lightsource=None,**kwargs)

3、animation的概述:
matplotlib在1.1版本的标准库中加入了动画模块
-animation,使用该模块的Animation类可以实现一些基本的动画效果。Animation类是一个动画基类,它针对不同的行为分别派生了不同的子类,主要包括FuncAnimation、ArtistAnimation类。
· FuncAnimation类表示基于重复调用一个函数的动画。
. ArtistAnimation类表示基于—组固定Artist
(标准的绘图元素,比如
文本、线条、矩形等)对象的动画。
FuncAnimation类
FuncAnimation是基于函数的动画类,它通过重复地调用同一丞数来制作动画。

FuncAnimation(tig, func, frames=None, init_func=None,fargs=None,
save _count=None,*,/view20/M00/34/21/wKh2DmC4usGAf0azAGSmfdci9Yw2l_6511240_d03a59fa

ArtistAnimation类
ArtistAnimation是基于一组Artist对象的动画类,它通过一帧一帧的数据制作动画。

ArtistAnimation(fig, artists,interval, repeat_delay, repeat,
blit,*args,**kwargs)

4、basemap概述
在数据可视化中,人们有时需将采集的数据按照其地理位置显示到地图上,常见于城市人口、飞机航线、矿藏分布等场景,有助于用户理解与空间有关的信息。basemap是matplotlib中的地图工具包,它本身不会参与任何绘图操作,而是会将给定的地理坐标转换到地图投影上,之后将数据交给matplotlib进行绘图。
安装basemap
在Anaconda中安装basemap的方式比较简单,可以直接在Anaconda Prompt工具中输入如下命令∶

conda nstall basemap

安装完成后,在Anaconda Prompt的命令提示符后面输入python,之后输入如下

from mpl_toolkits.basemap import Basemap

代码演示:

import numpy as np
from datetime import datetime
import matplotlib.pyplot as plt
from matplotlib.dates import DateFormatter,HourLocator
plt.rcParams["font.sans-serif"]=["SimHei"]
plt.rcParams["axes.unicode_minus"]=False
dates=['201910240','2019102402','2019102404','2019102406','2019102408',
       '2019102410','2019102412','2019102414','2019102416','2019102418',
       '2019102420','2019102422','201910250']
x_date=[datetime.strptime(d,'%Y%m%d%H') for d in dates]
y_date=np.array([7,9,11,14,8,15,22,11,10,11,11,13,8])
fig=plt.figure()
ax=fig.add_axes((0.0,0.0,1.0,1.0))
ax.plot(x_date,y_date,'->',ms=8,mfc='#FF9900')
ax.set_xlabel('时间')
ax.set_ylabel('平均速度(km/h)')
date_fmt=DateFormatter('%H:%M')
ax
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值