了解plot函数通过fmt传参中是否指定marker的各种情况,以及不通过fmt传参,而是通过**kwargs传参的情况

今天 探讨plot函数中fmt传参中是否指定marker的各种情况,以及不通过fmt传参,而是通过**kwargs传参的情况

在此先准备绘制一份带有误差棒的柱形图用以对比区分(数据摘自课本P48)

#导入库并命名
import matplotlib.pyplot as plt
import numpy as np

#设置汉字显示
plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False

#准备x轴和y轴数据
x = np.arange(3)
y1 = np.array([2.04, 1.57, 1.63])
y2 = np.array([1.69, 1.61, 1.64])
y3 = np.array([4.65, 4.99, 4.94])
y4 = np.array([3.39, 2.33, 4.10])

#指定测量偏差
error1 = [0.16, 0.08, 0.10]
error2 = [0.27, 0.14, 0.14]
error3 = [0.34, 0.32, 0.29]
error4 = [0.23, 0.23, 0.39]
bar_width = 0.2

#绘制柱形图
plt.bar(x, y1, bar_width)
plt.bar(x + bar_width, y2, bar_width, tick_label=["春季", "夏季", "秋季"])
plt.bar(x + 2*bar_width, y3, bar_width)
plt.bar(x + 3*bar_width, y4, bar_width)

#绘制误差棒: 横杆大小为 3,  线条宽度为 2,  线条颜色为黑色, 数据点标记样式为p(五角星)
plt.errorbar(x, y1, yerr=error1, capsize=3, elinewidth=2, fmt='pk')
plt.errorbar(x + bar_width,    y2, yerr=error2, capsize=3, elinewidth=2, fmt='pk')
plt.errorbar(x + 2*bar_width,  y3, yerr=error3, capsize=3, elinewidth=2, fmt='pk')
plt.errorbar(x + 3*bar_width,  y4, yerr=error4, capsize=3, elinewidth=2, fmt='pk')

#运行
plt.show()

运行结果图:

首先我们先了解fmt参数:可选参数 [fmt] 是一个字符串来定义图的基本属性如:颜色(color),点型(marker),线型(linestyle), 具体形式 fmt = ' [color] [marker] [line]'    

颜色:

符号含义
r红色
g绿色
b蓝色
c青色
y黄色
k黑色
w白色
m品红

标记样式:

符号含义
.实心点
+十字号
*星号
<朝左三角
>朝右三角
^朝上三角
v朝下三角
d菱形
p五角星
h六角星
s方块
o空心圆圆
x叉字符

线型:

符号含义
-细直线
:虚点线
-.点画线
虚画线

  

如果我们通过fmt传参时没有指定marker类型:

#绘制误差棒: 横杆大小为 3, 线条宽度为 2, 线条颜色为黑色, 无数据点标记样式
plt.errorbar(x, y1, yerr=error1, capsize=3, elinewidth=2, fmt='k')
plt.errorbar(x + bar_width,    y2, yerr=error2, capsize=3, elinewidth=2, fmt='k')
plt.errorbar(x + 2*bar_width,  y3, yerr=error3, capsize=3, elinewidth=2, fmt='k')
plt.errorbar(x + 3*bar_width,  y4, yerr=error4, capsize=3, elinewidth=2, fmt='k')

  运行结果图:

两者较之对比,很明显下面没指定marker类型的柱形图相较于上面一张柱形图在数据点的位置少了五边形的标记.并且marker在无参时不会影响其他属性的正常传入

那么我们再来换个标识点样式试一下:

#绘制误差棒: 横杆大小为 3,  线条宽度为 2,  线条颜色为黑色, 数据点标记样式为x(叉字符)
plt.errorbar(x, y1, yerr=error1, capsize=3, elinewidth=2, fmt='xk')
plt.errorbar(x + bar_width,    y2, yerr=error2, capsize=3, elinewidth=2, fmt='xk')
plt.errorbar(x + 2*bar_width,  y3, yerr=error3, capsize=3, elinewidth=2, fmt='xk')
plt.errorbar(x + 3*bar_width,  y4, yerr=error4, capsize=3, elinewidth=2, fmt='xk')

我们可以看到标记样式从五边形变成了叉字符

同时要注意:

  • 如果fmt字符串中提供了标记部分没有提供线形部分,将不会绘制直线
  • 如果不提供fmt字符串,则只绘制直线,不绘制标记。 

然后再来了解**kwargs参数

**kwargs是将一个可变的关键字参数的字典传给函数实参,同样参数列表长度可以为0或为其他值。

若不用fmt参数,那就要改用关键字参数(**kwargs)对单个属性赋值。

例如:

plot(x,y1,color='blue', marker='v', linestyle=':')

如果两个参数都对某一外观属性进行了定义,以关键字参数定义为准。 即关键字参数 **kwargs 参数优先级高于 fmt 参数

下面举例一下:

#绘制误差棒: 横杆大小为 3,  线条宽度为 2,  线条颜色为黑色, 数据点标记样式为p(五角星),线条样式为点线
plt.errorbar(x,y1, yerr=error1, capsize=3, elinewidth=2, color='black',linestyle=':',marker='p')
plt.errorbar(x + bar_width, y2, yerr=error2, capsize=3, elinewidth=2, color='black',linestyle=':',marker='p')
plt.errorbar(x + 2*bar_width,  y3, yerr=error3, capsize=3, elinewidth=2, color='black',linestyle=':',marker='p')
plt.errorbar(x + 3*bar_width,  y4, yerr=error4, capsize=3, elinewidth=2, color='black',linestyle=':',marker='p')

运行结果图:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值