python使用matplotlib库绘制图表记录

 

1. 布局:

       关于多个子图布局,可以通过fig.add_subplot()来获取子图,之前在度娘查询了很多资料,没有找到符合需求的,因为我需要一个不规则的布局,搜索了很久,找到了matplotlib库中的 gridspec,用来做网格划分,其使用方式如下:

fig = plt.figure()
#将fig划分为3行5列
spec = gridspec.GridSpec(ncols=5, nrows=3, figure=fig)
#获取到第一行第一列的子图
ax = fig.add_subplot(spec[0,0])
#获取第一行第二列到第五列的跨列子图
ax1 = fig.add_subplot(spec[0,1:])

  其中[0, 1:]为numpy数组中的切片语法

1.1 切片语法如下:

例如

x = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

1.1.1: 基本切片语法是i:j:k ,其中i是起始索引, j是停止索引,并且ķ是步骤(k!=0)。这将选择索引值为i,i + k,… 一直到第j个元素停止

>> x[1:7:2]
array([1, 3, 5])

1.1.2:负数的i和j,可以说是n+i 和n+j,其中n是相应数组中的元素数量,负k就往小的索引前进

>> x[-2:10]
array([8, 9])
>> x[-3:3:-1]
array([7, 6, 5, 4])

1.1.3:如果没有给出i、j、k的话,则k默认为1,j默认为该数组的最后一个索引,i默认为0,i和j,其中,如果j和k未赋值时,:和::效果是一样,k之前的:可省略

>> x[5:]
array([5, 6, 7, 8, 9])
>> x[:5]
array([0, 1, 2, 3, 4])
>> x[::2]
array([0, 2, 4, 6, 8])

 1.2 子图边距与宽高的调整

  使用fig.subplots_adjust可以调整子图与上下左右边距的距离,同时可以通过调整横向间距(wspace)与纵向间距(hspace)来将子图等比例缩小或放大,调整边距时要保证left < right, bottom < top,否则会报错。

fig.subplots_adjust(wspace=1.7, hspace=0.3,
						left=0.145, right=0.9,
						top=0.9,	bottom=-0.2)

2. 显示:

  2.1 图表的层次

       此次遇到的需求是由多个柱体覆盖而成的一个区间柱体,至于是不是有别的方式可以实现,本人就不太清楚,我选择的是在同一个X轴点上画上多个不同高度的bar,此时就有一个覆盖的问题,于是找到了zorder,zorder越大,则该柱体在越上面(不仅仅柱体可用,text或者其他散点之类的都可以使用)

ax.bar(x=x, height=y, zorder=1)
ax.bar(x=x, height=y1, zorder=2)

  2.2 在柱体上画上一条线

       因为涉及到类似临界值的东西,需要在柱体上有一条线,同时该条线不能再y的0刻度上出现延伸,找了一下官网,发现有bottom这个属性,设置底部的位置,而此时高度就不能设定,否则的话就相当于把柱体往上或往下挪了一下位置而已,虽然解决了问题,但是还是不够完美,本来是虚线的,但是因为bottom和top重叠了,感官上就成了实线,怎么解决还在寻找中

y=[0]
criArr=[1]
ax.bar(x=x, height=y, width = 0.1, bottom=criArr, color='none', linewidth=1, edgecolor='#FF3333', lineStyle="-.", alpha=0.8, zorder=5)

总结

以上就是今天要讲的内容,本文仅仅简单记录遇到的一些在度娘上不容易查到的问题,这样记录下来不仅将来可以回顾而且可以与大家共享。

你可能感兴趣的:(python,matplotlib,python,matplotlib,其他)