Matplotlib 绘图 (一)

Matplotlib 绘制柱状图

(一) Matplotlib 绘制柱状图


参考文献:
1.http://c.biancheng.net/matplotlib/figure-object.html
2.https://matplotlib.org/stable/tutorials/introductory/usage.html

Matplotlib 绘制柱状图

  • Matplotlib 绘制柱状图
  • 一、 figure() 创建一个空白画布
  • 二、 axes类对象的使用
    • 1. add_axes添加到画布中
    • 2. legend()绘制图例
  • 三、输出多个子图
    • 1. subplot() 函数输出多个子图
  • 四、设置坐标轴格式
    • 1. xscale设置坐标轴格式
    • 2. set_xlim()设置坐标轴范围
    • 3. xticks()设置坐标轴刻度和标签
    • 4. 显示中文
  • 五、绘制柱状图
    • 1. color 设置柱状的颜色
    • 2. hatch设置柱状的填充图案
    • 3. 在plt.legend()前添加plt.text()在柱状图中显示具体数字
  • 代码


一、 figure() 创建一个空白画布

fig = plt.figure()

运行结果:
Matplotlib 绘图 (一)_第1张图片


二、 axes类对象的使用

1. add_axes添加到画布中

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%。

运行结果:
Matplotlib 绘图 (一)_第2张图片

2. legend()绘制图例

ax.legend(handles, labels, loc)
  • labels 是一个字符串序列,用来指定标签的名称;
  • loc 是指定图例位置的参数,其参数值可以用字符串或整数来表示;
  • handles 参数,它也是一个序列,它包含了所有线型的实例;

loc参数的表示法(可用字符串或整数):
Matplotlib 绘图 (一)_第3张图片

#...代码略...
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()

运行结果:
Matplotlib 绘图 (一)_第4张图片

三、输出多个子图

1. subplot() 函数输出多个子图

plt.subplot(nrows, ncols, index)

nrows 与 ncols 表示要划分几行几列的子区域(nrows*nclos表示子图数量),index 的初始值为1,用来选定具体的某个子区域。如果新建的子图与现有的子图重叠,那么重叠部分的子图将会被自动删除,因为它们不可以共享绘图区域。

例如: subplot(233)表示在当前画布的右上角创建一个两行三列的绘图区域(如下图所示),同时,选择在第 3 个位置绘制子图。
Matplotlib 绘图 (一)_第5张图片
如果不想覆盖之前的图,需要使用 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()

运行结果:
Matplotlib 绘图 (一)_第6张图片


四、设置坐标轴格式

1. xscale设置坐标轴格式

#...代码略...
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 绘图 (一)_第7张图片

2. set_xlim()设置坐标轴范围

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 绘图 (一)_第8张图片

3. xticks()设置坐标轴刻度和标签

刻度指的是轴上数据点的标记,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()

运行结果:
Matplotlib 绘图 (一)_第9张图片

4. 显示中文

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

1. color 设置柱状的颜色

Matplotlib 绘图 (一)_第10张图片

  • rgb:

格式形式:(r,g,b)
取值范围:0~1

2. hatch设置柱状的填充图案

属性取值:{‘/’, ‘’, ‘|’, ‘-’, ‘+’, ‘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="//")

运行结果:
Matplotlib 绘图 (一)_第11张图片

3. 在plt.legend()前添加plt.text()在柱状图中显示具体数字

plt.text(x,	y,	string,	fontsize=15,verticalalignment="top",horizontalalignment="right"
)
  • x,y:表示text所在的坐标值
  • string:表示说明文字
  • fontsize:表示字体大小
  • verticalalignment:垂直对齐方式 ,参数:[ ‘center’ | ‘top’ | ‘bottom’ | ‘baseline’ ]
  • horizontalalignment:水平对齐方式 ,参数:[ ‘center’ | ‘right’ | ‘left’ ]

参考文献链接: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()

运行结果:
Matplotlib 绘图 (一)_第12张图片

你可能感兴趣的:(遥感数据python编程,matplotlib,python,开发语言)