Python数据可视化第六节(坐标轴的定制)

6.1 坐标轴概述

在绘制图表的过程中,marplotlib会根据所终園表的类形洪定是否使用坐标系,或者显示哪种类型的坐标系。例如,饼图无坐标系,雷达劉需使用板坐标系,折线園雷使用直魚璺船系等。其中,直角坐标系经常被使用。marplotlib 中的直角坐标系由两条水平坐标轴,两条垂直坐标轴以及围成的绘图区城构成,以限制图形显示的区城,其左侧和下方的坐标轴 (叫做Y轴和X轴)经常被使用,其他坐标轴很少被使用。

6.2 向任位置添加坐标轴

marplotlib支特向画布的任意位置添加自定义大小的坐标系统,同时显示坐标轴,而不再受规划区城的限制。pyplot機块可以使用axes()函数创建一个人Axes类的对象。并将Axes类的对象添加到当前画布中。axes()函数的语法格式如下:

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

案例一:

1.代码如下:

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("2020080603052")
plt.show()

运行代码结果如下:
在这里插入图片描述

6.3 定制刻度

6.3.1 定制刻度的位置和格式

在matplotlib中,刻度线分为主刻度线和次刻度线,次刻度线默认是隐藏matplotlib.ticker模块中提供了两个类:Locator 和Formatter,分別代表刻度定位器和刻度格式器,用于指定刻度线的位置和刻度标签的格式。

6.3.2 定制刻度的样式

在matplotlib 中,坐标轴的刻度有着固定的样式,例如,刻度线的方向是朝外的,刻度
线的颜色是黑色等。pyplot 中可以使用tick_paramas()函数定制刻度的样式tick_parama()函数的语法格式如下:

tick_params(axis='both',**kwargs)

案例二:

1.代码如下:

import matplotlib.pyplot as plt
from datetime import datetime
from matplotlib.dates import DateFormatter, HourLocator
ax = plt.gca()
hour_loc = HourLocator(interval=2)
date_fmt = DateFormatter('%Y/%m/%d')
ax.xaxis.set_major_locator(hour_loc)
ax.xaxis.set_major_formatter(date_fmt)
plt.tick_params(labelrotation=30)

运行代码,结果如下:
在这里插入图片描述

案例三:深圳市24小时的平均风速

数据如下:

时间风速
00:007
02:009
04:0011
06:0014
08:008
10:0015
12:0022
14:0011
16:0010
18:0011
20:0013
24:008
运行代码如下:
# 实例6:深圳市24小时的平均风速
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_data = 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_data, '->', ms=8, mfc='#FF9900')
ax.set_title(' 深圳市24小时的平均风速 2020080603052')
ax.set_xlabel('时间(h)')
ax.set_ylabel('平均风速(km/h)')
# 设置 x 轴主刻度的位置和格式
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)
plt.show()

运行代码,结果如下:
在这里插入图片描述

6.4 隐藏轴脊

案例四:隐藏全部轴脊

代码如下:

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.axis('off')
plt.title("2020080603052")
plt.show()

运行代码,结果如下:
在这里插入图片描述

案例五:隐藏部分轴脊

代码如下:

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='y')
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("2020080603052")
plt.show()

运行代码,结果如下:
在这里插入图片描述
运行代码如下:

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='y')
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("2020080603052")
plt.show()

运行代码,结果如下:
在这里插入图片描述

案例六:深圳市24小时的平均风速

代码如下:

# 实例6:深圳市24小时的平均风速
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_data = 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_data, '->', ms=8, mfc='#FF9900')
ax.set_title(' 深圳市24小时的平均风速 2020080603052')
ax.set_xlabel('时间(h)')
ax.set_ylabel('平均风速(km/h)')
# 设置 x 轴主刻度的位置和格式
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()

运行代码,结果如下:
在这里插入图片描述

6.5 移动轴脊

案例七:移动轴脊的位置:

代码如下:

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='y')
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("2020080603052")
plt.show()

运行代码,结果如下:
在这里插入图片描述

案例八:正弦与余弦曲线

代码如下:

# 03_sin_and_cos
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='正弦曲线 ')
ax.plot(x_data, y_two, label='余弦曲线 ')
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$ ', '$0$', 
                    '$\pi/2$', '$\pi$', '$3\pi/2$', '$2\pi$'])
ax.set_yticks([-1.0, -0.5, 0.0, 0.5, 1.0])
ax.set_yticklabels([-1.0, -0.5, 0.0, 0.5, 1.0])
# 隐藏右轴脊和上轴脊
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
# 移动左轴脊和下轴脊的位置
ax.spines['left'].set_position(('data', 0))
ax.spines['bottom'].set_position(('data', 0))
plt.title("2020080603052")
plt.show()

运行代码,结果如下:
在这里插入图片描述

  • 7
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值