Error[8]: Undefined offset: 933, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(


一、坐标轴的概述

在绘制图表的过程中,matplotlib会根据所绘制图表的类型决定是否使用坐标系,或者显示哪种类型的坐标系。



坐标轴的结构相同,主要包括轴脊、刻度,其中刻度又可以细分为刻度线和刻度标签,刻度线又可以细分为主刻度线和次刻度线。


坐标轴的各部分均是matplotlib类的对象:坐标轴是axis.Axis类的对象;轴脊是spines.Spine类的对象;刻度是axis.Ticker类的对象。


此外,常用的x轴是一个axis.Xaxis类的对象,y轴是一个axis.Yaxis类的对象。



这些属性的介绍如下:

访问spines属性会返回一个OrderedDict类的对象。


OrderedDict类是dict的子类,它可以维护添加字典中的键值对的顺序,代码如下:

print(ax.spines)

二、向任意位置添加坐标轴

matplotlib支持向画布的任意位置添加自定义大小的坐标系统,同时显示坐标轴,而不再受规划区域的限制。


pyplot模块可以使用axes()函数创建一个Axes类的对象,并将Axes类的对象添加到当前画布中。


axes()函数的语法如下:

axes(arg=None,projection=None,polar=False,aspect,frame_on,**kwargs)

该函数常用参数含义如下:

(1)参数arg支持None、4-tuple中任一取值,每种取值的含义如下

(2)参数projection表示坐标轴的类型,可以是None、 ‘atoff、‘hammer’、"lambert’
mollweide’ ‘polar 或’rectilinear’中的任一取值,也可以使用自定义的类型。



(3)参数polar表示是否使用极坐标,若设为True, 则其作用等价于projection=‘polar’。



(4)参数aspect表示坐标轴缩放的比例,可接收’auto’、 ‘equal’、 num中任一取值。



(5)参数frame_on表示是否绘制每个坐标轴的轴脊。



例如,代码,如下:

import matplotlib.pyplot as plt
ax=plt.axes((0.2,0.5,0.3,0.3))
ax.plot([1,2,3,4,5])
ax2=plt.axes((0.6,0.4,0.2,0.2))
ax2.plot([1,2,3,4,5])
plt.title("39")
plt.show()

运行程序,效果如下:


三、定制刻度

3.1、定制刻度的位置和格式
在matplotlib中,刻度线分别为主刻度线和次刻度线,次刻度线默认是隐藏的。



matplotlib.ticker模块中提供了两个类:Locator和Formatter,分别代表刻度定位器和刻度格式器,用于指定刻度线的位置和刻度标签的格式。



1.刻度定位线
Locator是刻度定位器的基类,它派生了很多子类,通过这些子类构建的刻度定位器可以调整刻度的间隔、选择刻度的位置。



常见的子类

与日期时间相关的locator的常见子类

以HourLocator为例,语法格式如下:

hour_loc= HourLocator(interval=2)

ax.xaxis.set_major_locator(hour_loc)

2.刻度格式器
Formatter是刻度格式器的基类,它派生了很多子类,通过这些子类构建的刻度格式器可以调整刻度标签的格式。


Formatter的常见子类如图所示

3.2、定制刻度的样式
在matplotlib中,坐标轴的刻度有着固定的样式,例如,刻度线的方向是朝外的刻度线的颜色是黑色的等。


使用tick_params()函数可以定制刻度的样式。


语法格式如下:

tick _params( axis='both'**kwargs)

该函数的语法格式如下:

代码如下:

plt.tick_params(direction='out',length=6,width=2,colors='r')
plt.title("39")
plt.show()

运行结果如下:


四、隐藏轴脊

坐标轴一般将轴脊作为刻度的载体,在轴脊上显示刻度标签和刻度线。


matplotlib中的坐标系默认有4个轴脊,分别是上轴脊、下轴脊、左轴脊和右轴脊,其中上轴脊和右轴脊并不经常使用,大多数情况下可以将上轴脊和右轴脊隐藏。



4.1、隐藏全部轴脊
使用pyplot的axis()函数可以设置或获取一些坐标轴的属性,包括显示或隐藏坐标轴的轴脊。


语法格式如下:

axis(option,**args,**kwargs)
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as mpathes
polygon=mpathes.RegularPolygon((0.5,0.5),6,0.2,color='y')
ax=plt.axes((0.3,0.3,0.5,0.5))
ax.add_patch(polygon)
ax.axis('off')
plt.title('39')
plt.show()

代码运行结果如下:

patches模块

matplotlib.patches是专门用于绘制路径和形状的模块,该模块中提供了一些表示形状(诸如箭头、圆形、长方形等)的类,通过创建这些类的对象可以快速绘制常见的形状。


4.2、隐藏部分轴脊
matplotlib可以只隐藏坐标轴的部分轴脊,只需要访问spines属性获取相应的轴脊,之后调用set_coloe()方法将轴脊的颜色设为none即可,代码如下:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as mpathes
polygon=mpathes.RegularPolygon((0.5,0.5),6,0.2,color='pink')
ax=plt.axes((0.3,0.3,0.5,0.5))
ax.add_patch(polygon)
ax.spines['top'].set_color('none')
ax.spines['left'].set_color('none')
ax.spines['right'].set_color('none')
plt.title('39')
plt.show()

运行代码如下:

matplotlib可以通过set_ticks_position()方法设置刻度线的颜色为’none’,通过set_yticklabels()方法设置刻度标签为空列表。


import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as mpathes
polygon=mpathes.RegularPolygon((0.5,0.5),6,0.2,color='g')
ax=plt.axes((0.3,0.3,0.5,0.5))
ax.add_patch(polygon)
ax.spines['top'].set_color('none')
ax.spines['left'].set_color('none')
ax.spines['right'].set_color('none')
ax.yaxis.set_ticks_position('none')
ax.set_yticklabels([])
plt.title('39')
plt.show()

程序运行结果如下:

实例:
折现图显示了全部的轴脊,但右轴脊和上轴脊并未起到任何作用

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,'-o',ms=8,mfc='#FF0000')
ax.set_title('深圳24h的平均风速 39')
ax.set_xlabel('时间')
ax.set_ylabel('平均速度(km/h)')
date_fmt=DateFormatter('%H:%M')
ax.xaxis.set_major_formatter(date_fmt)
ax.xaxis.set_major_locator(HourLocator(interval=2))
ax.tick_params(direction='in',length=6,width=2,labelsize=12)
ax.xaxis.set_tick_params(labelrotation=45)
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')

plt.show()

代码运行结果如下:


五、移动轴脊

5.1、移动轴脊的位置
在matploltlib中,Spine类提供了一个设置轴脊位置的set_position()方法,语法格式如下:

set_position(self,position)

该方法的position参数表示轴脊的位置,它需要接收一个包含两个元素的元组(osition_type,amout),其中元素position_type代表位置的类型,元素amount代表位置

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as mpathes
xy=np.array([0.5,0.5])
polygon=mpathes.RegularPolygon(xy,5,0.2,color='r')
ax=plt.axes((0.3,0.3,0.5,0.5))
ax.add_patch(polygon)
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')
ax.spines['left'].set_position(('data',0.5))
ax.spines['bottom'].set_position(('data',0.5))
plt.title('2020080603039')
plt.show()

代码运行结果如下:

实例:正弦与余弦曲线

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"]=["SimHei"]
plt.rcParams["axes.unicode_minus"]=False
x_data=np.linspace(-2*np.pi,2*np.pi,100)
y_one=np.sin(x_data)
y_two=np.cos(x_data)
fig=plt.figure()
ax=fig.add_axes((0.2,0.2,0.7,0.7))
ax.plot(x_data,y_one,label='正弦曲线 39')
ax.plot(x_data,y_two,label='余弦曲线 39')
ax.legend()
ax.set_xlim(-2*np.pi,2*np.pi)
ax.set_xticks([-2*np.pi,-3*np.pi/2,-1*np.pi,-1*np.pi/2,
              0,np.pi/2,np.pi,3*np.pi/2,2*np.pi])
ax.set_xticklabels(['$-2\pi$','$-3\pi/2$','$-\pi$','$-\pi/2$',
                    ',$''$\pi/2$','$/pi/2$','\pi/2$','\pi$',]).
axset_yticks([-1.0,-0.5,0.0,0.5,1.0]).
axset_yticklabels([-1.0,-0.5,0.0,0.5,1.0]).
ax[spines'top'].set_color('none').
ax[spines'right'].set_color('none').
ax[spines'left'].set_position(('data',0.5)).
ax[spines'bottom'].set_position(('data',0.5)).
plttitle('39').
pltshow()[+++]

代码运行结果如下:

大数据2003
2020080603039
张馨月

)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 165, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
数据可视化——坐标轴的定制_python_内存溢出

数据可视化——坐标轴的定制

数据可视化——坐标轴的定制,第1张


一、坐标轴的概述

在绘制图表的过程中,matplotlib会根据所绘制图表的类型决定是否使用坐标系,或者显示哪种类型的坐标系。



坐标轴的结构相同,主要包括轴脊、刻度,其中刻度又可以细分为刻度线和刻度标签,刻度线又可以细分为主刻度线和次刻度线。


坐标轴的各部分均是matplotlib类的对象:坐标轴是axis.Axis类的对象;轴脊是spines.Spine类的对象;刻度是axis.Ticker类的对象。


此外,常用的x轴是一个axis.Xaxis类的对象,y轴是一个axis.Yaxis类的对象。



这些属性的介绍如下:

  • xaxis:获取x轴
  • yaxis:获取y轴
  • spines:获取包含全部轴脊的字典

访问spines属性会返回一个OrderedDict类的对象。


OrderedDict类是dict的子类,它可以维护添加字典中的键值对的顺序,代码如下:

print(ax.spines)

二、向任意位置添加坐标轴

matplotlib支持向画布的任意位置添加自定义大小的坐标系统,同时显示坐标轴,而不再受规划区域的限制。


pyplot模块可以使用axes()函数创建一个Axes类的对象,并将Axes类的对象添加到当前画布中。


axes()函数的语法如下:

axes(arg=None,projection=None,polar=False,aspect,frame_on,**kwargs)

该函数常用参数含义如下:

(1)参数arg支持None、4-tuple中任一取值,每种取值的含义如下

  • None:表示使用subplot(11)添加的与画布同等大小的Axes对象。


  • 4-tuple :由4个浮点型元素(取值范围为0~ 1)组成的元组(lef, bttom, widh,
    前两个元素left和bottom分别表示坐标轴左侧和底部的边缘到画布的相对距离,用
    坐标轴的位置;后两个元素width和height分别表示坐标轴的宽度和高度,用于确定
    坐标轴的相对大小。


(2)参数projection表示坐标轴的类型,可以是None、 ‘atoff、‘hammer’、"lambert’
mollweide’ ‘polar 或’rectilinear’中的任一取值,也可以使用自定义的类型。



(3)参数polar表示是否使用极坐标,若设为True, 则其作用等价于projection=‘polar’。



(4)参数aspect表示坐标轴缩放的比例,可接收’auto’、 ‘equal’、 num中任一取值。



(5)参数frame_on表示是否绘制每个坐标轴的轴脊。



例如,代码,如下:

import matplotlib.pyplot as plt
ax=plt.axes((0.2,0.5,0.3,0.3))
ax.plot([1,2,3,4,5])
ax2=plt.axes((0.6,0.4,0.2,0.2))
ax2.plot([1,2,3,4,5])
plt.title("39")
plt.show()

运行程序,效果如下:


三、定制刻度

3.1、定制刻度的位置和格式
在matplotlib中,刻度线分别为主刻度线和次刻度线,次刻度线默认是隐藏的。



matplotlib.ticker模块中提供了两个类:Locator和Formatter,分别代表刻度定位器和刻度格式器,用于指定刻度线的位置和刻度标签的格式。



1.刻度定位线
Locator是刻度定位器的基类,它派生了很多子类,通过这些子类构建的刻度定位器可以调整刻度的间隔、选择刻度的位置。



常见的子类

与日期时间相关的locator的常见子类

以HourLocator为例,语法格式如下:

hour_loc= HourLocator(interval=2)

ax.xaxis.set_major_locator(hour_loc)

2.刻度格式器
Formatter是刻度格式器的基类,它派生了很多子类,通过这些子类构建的刻度格式器可以调整刻度标签的格式。


Formatter的常见子类如图所示

3.2、定制刻度的样式
在matplotlib中,坐标轴的刻度有着固定的样式,例如,刻度线的方向是朝外的刻度线的颜色是黑色的等。


使用tick_params()函数可以定制刻度的样式。


语法格式如下:

tick _params( axis='both'**kwargs)

该函数的语法格式如下:

  • axis:表示选择 *** 作的轴,可以取值为’x’、‘y’或’both’,默认为’both’。


  • which:表示刻度的类型,可以取值为’major’、 ‘minor’或’both’,默认为’major’。


    direction:表示刻度线的方向,可以取值为’in’、 'out’或’inout’。


  • length:表示刻度线的长度。


  • width:表示刻度线的宽度。


    color:表示刻度线的颜色。


  • pad:表示刻度线与刻度标签的距离。


  • labelsize:表示刻度标签的字体大小。


  • labelcolor:表示刻度标签的颜色。


  • bottom,top,left,right:表示是否显示下方、上方、左方、右方的刻度线。


  • labelrotation:表示刻度标签旋转的角度。


代码如下:

plt.tick_params(direction='out',length=6,width=2,colors='r')
plt.title("39")
plt.show()

运行结果如下:


四、隐藏轴脊

坐标轴一般将轴脊作为刻度的载体,在轴脊上显示刻度标签和刻度线。


matplotlib中的坐标系默认有4个轴脊,分别是上轴脊、下轴脊、左轴脊和右轴脊,其中上轴脊和右轴脊并不经常使用,大多数情况下可以将上轴脊和右轴脊隐藏。



4.1、隐藏全部轴脊
使用pyplot的axis()函数可以设置或获取一些坐标轴的属性,包括显示或隐藏坐标轴的轴脊。


语法格式如下:

axis(option,**args,**kwargs)
  • ‘on’:显示轴脊和刻度,等同于True
  • ‘off’:隐藏轴脊和刻度,等同于False
  • ‘equal’:通过更改轴限设置等比例
  • ‘scaled’:通过更改绘图框的尺寸设置等比例
  • ‘tight’:设置足够大的限制以显示所有数据
  • ‘auto’:自动缩放
    此外,Axes类的对象也可以使用axis ()方法隐藏坐标轴的轴脊。



    绘制一个六边形且隐藏全部的轴脊,具体代码如下:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as mpathes
polygon=mpathes.RegularPolygon((0.5,0.5),6,0.2,color='y')
ax=plt.axes((0.3,0.3,0.5,0.5))
ax.add_patch(polygon)
ax.axis('off')
plt.title('39')
plt.show()

代码运行结果如下:

patches模块

matplotlib.patches是专门用于绘制路径和形状的模块,该模块中提供了一些表示形状(诸如箭头、圆形、长方形等)的类,通过创建这些类的对象可以快速绘制常见的形状。


4.2、隐藏部分轴脊
matplotlib可以只隐藏坐标轴的部分轴脊,只需要访问spines属性获取相应的轴脊,之后调用set_coloe()方法将轴脊的颜色设为none即可,代码如下:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as mpathes
polygon=mpathes.RegularPolygon((0.5,0.5),6,0.2,color='pink')
ax=plt.axes((0.3,0.3,0.5,0.5))
ax.add_patch(polygon)
ax.spines['top'].set_color('none')
ax.spines['left'].set_color('none')
ax.spines['right'].set_color('none')
plt.title('39')
plt.show()

运行代码如下:

matplotlib可以通过set_ticks_position()方法设置刻度线的颜色为’none’,通过set_yticklabels()方法设置刻度标签为空列表。


import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as mpathes
polygon=mpathes.RegularPolygon((0.5,0.5),6,0.2,color='g')
ax=plt.axes((0.3,0.3,0.5,0.5))
ax.add_patch(polygon)
ax.spines['top'].set_color('none')
ax.spines['left'].set_color('none')
ax.spines['right'].set_color('none')
ax.yaxis.set_ticks_position('none')
ax.set_yticklabels([])
plt.title('39')
plt.show()

程序运行结果如下:

实例:
折现图显示了全部的轴脊,但右轴脊和上轴脊并未起到任何作用

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,'-o',ms=8,mfc='#FF0000')
ax.set_title('深圳24h的平均风速 39')
ax.set_xlabel('时间')
ax.set_ylabel('平均速度(km/h)')
date_fmt=DateFormatter('%H:%M')
ax.xaxis.set_major_formatter(date_fmt)
ax.xaxis.set_major_locator(HourLocator(interval=2))
ax.tick_params(direction='in',length=6,width=2,labelsize=12)
ax.xaxis.set_tick_params(labelrotation=45)
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')

plt.show()

代码运行结果如下:


五、移动轴脊

5.1、移动轴脊的位置
在matploltlib中,Spine类提供了一个设置轴脊位置的set_position()方法,语法格式如下:

set_position(self,position)

该方法的position参数表示轴脊的位置,它需要接收一个包含两个元素的元组(osition_type,amout),其中元素position_type代表位置的类型,元素amount代表位置

  • ‘center’:值为(‘axes’,0.5)。


  • zero’:值为(‘data’, 0.0)。


  • outward’:表示将轴脊置于移出数据区域指定点数的位置。


  • ‘axes’:表示将轴脊置于指定的坐标系中(0.0~1.0) 。


  • ‘data’’:表示将轴脊置于指定的数据坐标的位置。



    代码如下:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as mpathes
xy=np.array([0.5,0.5])
polygon=mpathes.RegularPolygon(xy,5,0.2,color='r')
ax=plt.axes((0.3,0.3,0.5,0.5))
ax.add_patch(polygon)
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')
ax.spines['left'].set_position(('data',0.5))
ax.spines['bottom'].set_position(('data',0.5))
plt.title('2020080603039')
plt.show()

代码运行结果如下:

实例:正弦与余弦曲线

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"]=["SimHei"]
plt.rcParams["axes.unicode_minus"]=False
x_data=np.linspace(-2*np.pi,2*np.pi,100)
y_one=np.sin(x_data)
y_two=np.cos(x_data)
fig=plt.figure()
ax=fig.add_axes((0.2,0.2,0.7,0.7))
ax.plot(x_data,y_one,label='正弦曲线 39')
ax.plot(x_data,y_two,label='余弦曲线 39')
ax.legend()
ax.set_xlim(-2*np.pi,2*np.pi)
ax.set_xticks([-2*np.pi,-3*np.pi/2,-1*np.pi,-1*np.pi/2,
              0,np.pi/2,np.pi,3*np.pi/2,2*np.pi])
ax.set_xticklabels(['$-2\pi$','$-3\pi/2$','$-\pi$','$-\pi/2$',
                    ',$''$\pi/2$','$/pi/2$','\pi/2$','\pi$',]).
axset_yticks([-1.0,-0.5,0.0,0.5,1.0]).
axset_yticklabels([-1.0,-0.5,0.0,0.5,1.0]).
ax[spines'top'].set_color('none').
ax[spines'right'].set_color('none').
ax[spines'left'].set_position(('data',0.5)).
ax[spines'bottom'].set_position(('data',0.5)).
plttitle('39').
pltshow()

代码运行结果如下:

大数据2003
2020080603039
张馨月

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/579172.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-11
下一篇 2022-04-11

发表评论

登录后才能评论

评论列表(0条)

保存