(一) Matplotlib 绘制柱状图
参考文献:
1.http://c.biancheng.net/matplotlib/figure-object.html
2.https://matplotlib.org/stable/tutorials/introductory/usage.html
fig = plt.figure()
ax=fig.add_axes([0.1,0.1,0.8,0.8])
其中由 4 个元素组成的浮点数列表,形如 [left, bottom, width, height] ,它表示添加到画布中的矩形区域的左下角坐标(x, y),以及宽度和高度。每个元素的值是画布宽度和高度的分数。即将画布的宽、高作为 1 个单位。比如,[ 0.1, 0.1, 0.8, 0.8],它代表着从画布 10% 的位置开始绘制, 宽高是画布的 80%。
ax.legend(handles, labels, loc)
#...代码略...
l1 = ax.plot(x1,y,'ys-')
l2 = ax.plot(x2,y,'go--')
ax.legend(labels = ('tv', 'Smartphone'), loc = 'lower right') # legend placed at lower right
ax.set_title("Advertisement effect on sales")
ax.set_xlabel('medium')
ax.set_ylabel('sales')
plt.show()
plt.subplot(nrows, ncols, index)
nrows 与 ncols 表示要划分几行几列的子区域(nrows*nclos表示子图数量),index 的初始值为1,用来选定具体的某个子区域。如果新建的子图与现有的子图重叠,那么重叠部分的子图将会被自动删除,因为它们不可以共享绘图区域。
例如: subplot(233)表示在当前画布的右上角创建一个两行三列的绘图区域(如下图所示),同时,选择在第 3 个位置绘制子图。
如果不想覆盖之前的图,需要使用 add_subplot() 函数,通过给画布添加 axes 对象可以实现在同一画布中插入另外的图像。
#...代码略...
fig=plt.figure()
axes1 = fig.add_axes([0.1, 0.1, 0.8, 0.8]) # main axes
axes2 = fig.add_axes([0.55, 0.55, 0.3, 0.3]) # inset axes
y = np.sin(x)
axes1.plot(x, y, 'b')
axes2.plot(x,np.cos(x),'r')
axes1.set_title('sine')
axes2.set_title("cosine")
plt.show()
#...代码略...
fig, axes = plt.subplots(1, 2, figsize=(10,4))
x = np.arange(1,5)
axes[0].plot( x, np.exp(x))
axes[0].plot(x,x**2)
axes[0].set_title("Normal scale")
axes[1].plot (x, np.exp(x))
axes[1].plot(x, x**2)
#设置y轴
axes[1].set_yscale("log")
axes[1].set_title("Logarithmic scale (y)")
axes[0].set_xlabel("x axis")
axes[0].set_ylabel("y axis")
axes[0].xaxis.labelpad = 10 #指定x坐标轴标签的位置,若为负值,则落到图域里
#设置x、y轴标签
axes[1].set_xlabel("x axis")
axes[1].set_ylabel("y axis")
plt.show()
Matplotlib 可以根据自变量与因变量的取值范围,自动设置 x 轴与 y 轴的数值大小。也可以通过 set_xlim() 和 set_ylim() 对 x、y 轴的数值范围进行设置。
例如:set_xlim() 将 x 轴的数值范围设置为(0到10); set_ylim() 将 y 轴的范围设置为(0到10000)
#...代码略...
fig = plt.figure()
a1 = fig.add_axes([0,0,1,1])
import numpy as np
x = np.arange(1,10)
a1.plot(x, np.exp(x),'r')
a1.set_title('exp')
#设置y轴
a1.set_ylim(0,10000)
#设置x轴
a1.set_xlim(0,10)
plt.show()
刻度指的是轴上数据点的标记,Matplotlib 能够自动的在 x 、y 轴上绘制出刻度。但是在某些情况下,刻度标签或刻度也需要满足特定的要求,比如将刻度设置为“英文数字形式”或者“大写阿拉伯数字”,此时就需要对它们重新设置。
xticks() 和 yticks() 函数接受一个列表对象作为参数,列表中的元素表示对应数轴上要显示的刻度。如下所示:
ax.set_xticks([2,4,6,8,10])
x 轴上的刻度标记,依次为 2,4,6,8,10。也可以分别通过 set_xticklabels() 和 set_yticklabels() 函数设置与刻度线相对应的刻度标签。
fig = plt.figure()
#添加绘图区域
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])
y = np.sin(x)
ax.plot(x, y)
#设置x轴标签
ax.set_xlabel('angle')
ax.set_title('sine')
ax.set_xticks([0,2,4,6])
#设置x轴刻度标签
ax.set_xticklabels(['zero','two','four','six'])
#设置y轴刻度
ax.set_yticks([-1,0,1])
plt.show()
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"]=["SimHei"] #设置字体
plt.rcParams["axes.unicode_minus"]=False #该语句解决图像中的“-”负号的乱码问题
参考文献:
1.https://blog.csdn.net/weixin_54556126/article/details/121396907
格式形式:(r,g,b)
取值范围:0~1
属性取值:{‘/’, ‘’, ‘|’, ‘-’, ‘+’, ‘x’, ‘o’, ‘O’, ‘.’, ‘*’}
#...代码略...
ax.bar(X + 0, a['海北站'][0] , color=(0.2,0.2,0.2), width=0.25, label="CSIF数据集",hatch="o")
ax.bar(X + 0.25, a['海北站'][1] , color=(0.2*2,0.2*2,0.2*2), width=0.25, label="GOMESIF数据集",hatch="--")
ax.bar(X + 0.5, a['海北站'][2] , color=(0.2*4,0.2*4,0.2*4), width=0.25, label="GOSIF数据集",hatch="//")
plt.text(x, y, string, fontsize=15,verticalalignment="top",horizontalalignment="right"
)
参考文献链接:https://blog.csdn.net/TeFuirnever/article/details/88947248
#...准备数据等代码略...
# 创建一个空白画布
fig = plt.figure()
# 使用add_axes将axes轴域添加到画布中
# add_axes() 的参数值是一个序列,序列中的 4 个数字分别对应图形的左侧,底部,宽度,和高度,且每个数字必须介于 0 到 1 之间。
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])
#设置y轴坐标范围
ax.set_ylim(0.99850, 1)
x_labels = ["AG算法","SG算法","DL算法"]
X = np.arange(3)
# 替换横坐标x的值
plt.xticks(X+0.25, x_labels)
# 设置x、y轴标签
ax.set_ylabel('相关系数r')
ax.set_xlabel('物候提取算法')
# ax.set_title('sine')
ax.bar(X + 0, r[0] , color=(0.2,0.2,0.2), width=0.25, label="CSIF数据集",hatch="o")
ax.bar(X + 0.25, r[1] , color=(0.2*2,0.2*2,0.2*2), width=0.25, label="GOMESIF数据集",hatch="--")
ax.bar(X + 0.5, r[2] , color=(0.2*4,0.2*4,0.2*4), width=0.25, label="GOSIF数据集",hatch="//")
# 显示图例
plt.legend(loc='best')
plt.show()