文章目录
- 写在前面:
- 一、坐标刻度定位器
- 二、散点图
- 三、柱状图
- 四、颜色填充
写在前面:
- import numpy as np
- import matplotlib.pylab as mp
- 因此文章中的np就代表numpy库,mp就代表pylab绘图库
一、坐标刻度定位器
1、步骤
1)创建:定位器对象 = mp.XXXLocator(…)
2)获得坐标轴:ax = mp.gca()
3)主刻度:ax.xaxis.set_major_locator(定位器对象) # 例如厘米
4)次刻度:ax.xaxis.set_minor_locator(定位器对象) # 例如毫米
2、各种定位器
- mp.NullLocator():无刻度
- mp.MaxNLocator(nbins=5, steps=[1,3,5,7,9]):最多5个等分刻度,分别是1,3,5,7,9
- mp.FixedLocator(locs=[0, 2.5, 5, 7.5, 10]):直接将刻度放上去
- mp.AutoLocator():自动刻度,不需要提供参数(方便)
- mp.IndexLocator(offset=0.5, base=1.5):索引定位器(好用),一参是偏移量,二参是间隔大小
- mp.MultipleLocator():(好用)默认参数为1,就是主刻度间隔,可以用数字设定参数;次刻度默认为主刻度/10
- mp.LinearLocator(numticks=21):线性定位器,参数为分成多少个等分,此处为21等分
- mp.LogLocator(base=2, subs=[1.0]):对数定位器,间距不断扩大,取2的-1次方,2的0次方,2的1次方,2的2次方……
3、练习代码
import numpy as np
import matplotlib.pylab as mp
mp.figure(facecolor="lightgray")
locators=[
'mp.NullLocator()',
'mp.MaxNLocator(nbins=5, steps=[1,3,5,7,9])',
'mp.FixedLocator(locs=[0, 2.5, 5, 7.5, 10])',
'mp.AutoLocator()',
'mp.IndexLocator(offset=0.5, base=1.5)',
'mp.MultipleLocator()',
'mp.LinearLocator(numticks=21)',
'mp.LogLocator(base=2, subs=[1.0])',
]
n_locators = len(locators)
for i, locator in enumerate(locators):
mp.subplot(n_locators, 1, i+1)
mp.xlim(0, 10)
mp.ylim(-1, 1)
mp.yticks(())
ax = mp.gca()
ax.spines['left'].set_color("none")
ax.spines['top'].set_color("none")
ax.spines['right'].set_color("none")
ax.spines['bottom'].set_position(('data', 0))
ax.xaxis.set_major_locator(eval(locator))
ax.xaxis.set_minor_locator(mp.MultipleLocator(0.1))
mp.plot(np.arange(11), np.zeros(11), c='none')
mp.text(5, 0.3, locator[3:], ha='center', size=12)
mp.tight_layout()
mp.show()
二、散点图
1、方法
mp.scatter(水平坐标数组, 垂直坐标数组, s=点的大小, c=分布数据, cmap=颜色映射方式, alpha=透明度(0到1), marker=点的形状)
2、测试代码
import numpy as np
import matplotlib.pylab as mp
n = 1000
x = np.random.normal(0, 1, n)
y = np.random.normal(0, 1, n)
d = np.sqrt(x ** 2 + y ** 2)
mp.figure("Scatter", facecolor="lightgray")
mp.title("Scatter", fontsize=20)
mp.xlabel('X', fontsize=14)
mp.ylabel('Y', fontsize=14)
mp.tick_params(labelsize=10)
mp.grid(linestyle=":")
mp.scatter(x, y, s=60, c=d, cmap="jet_r", alpha=0.5, marker='*')
mp.show()
三、柱状图
1、方法
mp.bar(水平坐标数组, 高度数组(有正负), ec=边缘颜色, fc=填充颜色, label=标签文本, alpha=透明度 )
2、测试代码
import numpy as np
import matplotlib.pylab as mp
n = 12
x = np.arange(n)
y1 = (1 - x/n)* np.random.uniform(0.5, 1.0, n)
y2 = (1 - x/n)* np.random.uniform(0.5, 1.0, n)
mp.figure("Bar", facecolor="lightgray")
mp.title("Bar", fontsize=20)
mp.xlabel('X', fontsize=14)
mp.ylabel('Y', fontsize=14)
mp.tick_params(labelsize=10)
mp.grid(axis='y', linestyle=":")
mp.xticks(x, x+1)
mp.ylim(-1.25, 1.25)
mp.bar(x, y1, ec='white', fc='dodgerblue', label="Sample 1")
for _x, _y in zip(x, y1):
mp.text(_x, _y, '%.2f'%_y, ha='center', va='bottom', size=8)
mp.bar(x, -y2, ec='white', fc='dodgerblue', label="Sample 2", alpha=0.5)
for _x, _y in zip(x, y2):
mp.text(_x, -_y - 0.015, '%.2f'%_y, ha='center', va='top', size=8)
mp.legend()
mp.show()
四、颜色填充
1、方法
- mp.fill_between(水平坐标数组, 垂直坐标起点数组, 垂直坐标终点数组, 填充条件, color=颜色, alpha=透明度)
- 取从-π到π的999个点,作为横坐标:x = np.linspace(-np.pi, np.pi, 1000)
2、测试代码
import numpy as np
import matplotlib.pylab as mp
n = 1000
x = np.linspace(0, 8*np.pi, n)
sin_y = np.sin(x)
cos_y = np.cos(x/2)/2
mp.figure("Fill", facecolor="lightgray")
mp.title("Fill", fontsize=20)
mp.xlabel('X', fontsize=14)
mp.ylabel('Y', fontsize=14)
mp.tick_params(labelsize=10)
mp.grid(linestyle=":")
mp.plot(x, sin_y, c='dodgerblue', label=r"$y=sin(x)$")
mp.legend()
mp.plot(x, cos_y, c='orange', label=r"$y=\frac{1}{2}cos(\frac{x}{2})$")
mp.legend()
mp.fill_between(x, cos_y, sin_y, cos_y<sin_y, color="yellow", alpha=0.5)
mp.fill_between(x, cos_y, sin_y, cos_y>sin_y, color="lightblue", alpha=0.5)
mp.show()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)