⽤Matplotlib画⽔平柱状图和折线图的个⼈使⽤⼼得与总结
从4⽉5号到18号研究了两周的matplotlib,算是⼩有收获。⽹上关于matplotlib的使⽤⼤⼤⼩⼩问题的回答并不是很全⾯⽐较零碎,有些还是得靠摸索。这段时间主要研究了⽔平柱状图和折线图的使⽤,总结并记录⼀下。
⽔平柱状图
# 导⼊绘图包,分别导⼊避免出错,尽量不⽤from pylab import *
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.patches as patches
第⼀步,⼀定是定义⼀个画布
# 绘图窗⼝尺⼨(6英⼨,5英⼨),分辨率120,背景颜⾊设置为⽩⾊
plt.figure(figsize=(6,5),dpi=120,facecolor='white')
# 可显⽰中⽂字,字体为雅⿊
# 刻度值可以显⽰负数,避免显⽰问题
# 可以调⽤各种风格,这个风格⽆边框,不⽤额外设置,看着⼲净,⽤的⽐较多
# 可以使⽤plt.style.available获取所有美化样式,选择⼀个合适的
plt.style.use('fivethirtyeight')
# 如果⽤⾃⼰下载的字体,开头导⼊FontProperties和os模块的⼀些函数
from os.path import abspath, sep
from os import getcwd
from matplotlib.font_manager import FontProperties
myFont = FontProperties(fname=getcwd()+sep+'fonts'+sep+'STKAITI.TTF',size=12)
第⼆步,我⾃⼰把⽔平柱状图分为单柱和多柱。
# 不管多少柱,保持x和y对应的值的数量相同
width = 0.1 # 设置柱状图的宽度
x1 = [1.1,2,3.1,4.6,5] # 5个值
# x2 = [0.85] # 1个值
y1 = [0,1,2,3,4] # 也要5个值
# y2 = [0] # 也要1个值
y_labels = ['xxx','xxx','xxx','xxx','xxx'] # 5个标签对应5个值
idx = np.arange(len(x1))
# idx = np.arange(len(x2))
第三步,画图
# 可设置的参数很多,width,height,align,facecolor,edgecolor,alpha,label,zorder
# 通常align设置为center不⽤去调idx值对齐;alpha可以调透明度,越⼩越透明;zorder表⽰层级
# zorder=2的图像覆盖到zorder=1之上
plt.barh(
idx,x1,
width,
facecolor = 'blue',
edgecolor = 'white',
alpha = 0.3,
zorder = 1,
label = 'xxx')
第四步,设置辅助显⽰层的⼀些参数
1. title常⽤参数
fontsize设置字体⼤⼩,默认12,可选参数 [‘xx-small’, ‘x-small’, ‘small’, ‘medium’, ‘large’,‘x-large’, ‘xx-large’]
fontweight设置字体粗细,可选参数 [‘light’, ‘normal’, ‘medium’, ‘semibold’, ‘bold’, ‘heavy’, ‘black’] fontstyle设置字体类型,可选参数[ ‘normal’ | ‘italic’ | ‘oblique’ ],italic斜体,oblique倾斜
verticalalignment设置⽔平对齐⽅式 ,可选参数 : ‘center’ , ‘top’ , ‘bottom’ ,‘baseline’
horizontalalignment设置垂直对齐⽅式,可选参数:left,right,center
rotation(旋转⾓度)可选参数为:vertical,horizontal 也可以为数字
alpha透明度,参数值0⾄1之间
backgroundcolor标题背景颜⾊
bbox给标题增加外框 ,常⽤参数如下:
boxstyle⽅框外形
facecolor(简写fc)背景颜⾊
edgecolor(简写ec)边框线条颜⾊
edgewidth边框线条⼤⼩
2. xlabel,ylabel参数
fontsize:字体⼤⼩⾃调,默认12
verticalalignment:’top’, ‘bottom’, ‘center’, ‘baseline’
horizontalalignment:’center’, ‘right’, ‘left’
rotation: ‘vertical’,’horizontal’,’vertical’
3. subplots_adjust参数
如果y轴或x轴刻度标签放不进⼀个画⾯⾥,show图⽚后可以通过configure subplots按钮进⾏调整,再把其参数输⼊到代码中4. legend图例参数
loc参数,
0: ‘best’
1: ‘upper right’
2: ‘upper left’
3: ‘lower left’
4: ‘lower right’
5: ‘right’
6: ‘center left’
7: ‘center right’
8: ‘lower center’
9: ‘upper center’
10: ‘center’
fontsize参数
fontsize : int or float or {‘xx-small’, ‘x-small’, ‘small’, ‘medium’, ‘large’, ‘x-large’, ‘xx-large’}
frameon,edgecolor,facecolor参数
plt.legend(loc=‘best’,frameon=False) #去掉图例边框
plt.legend(loc=‘best’,edgecolor=‘blue’) #设置图例边框颜⾊
plt.legend(loc=‘best’,facecolor=‘blue’) #设置图例背景颜⾊,若⽆边框,参数⽆效
plt.title('xxx',fontsize=14,bbox=dict(facecolor='green',edgecolor='blue',alpha=0.6))
plt.xlabel('xxx',fontsize=10)
plt.ylabel('xxx',fontsize=10)
plt.subplots_adjust(left=0.1,right=0.9,top=0.9,bottom=0.2,hspace=0.12,wspace=0.1)
plt.legend(loc='best',fontsize=10)
# 表⽰不显⽰坐标轴
plt.axis('off')
第五步,设置⼀些坐标轴,刻度,刻度标签,矩形的参数
ax = a() # 获取当前axes
# spines是连接轴刻度标记的线,将其颜⾊设为none就是去掉该线
ax.spines['bottom'].set_color('none')
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.spines['left'].set_color('grey')
ax.spines['left'].set_linewidth(1)
# 可以设置为x轴不显⽰/y轴不显⽰
_xaxis().set_visible(False)
# x轴范围
ax.set_xlim(-1, 1.1)
# x轴坐标刻度(可以表⽰成具体的⼏个值)
ax.set_xticks([-1, 0, 1])
# x轴刻度标签,⽅便调⼤⼩
ax.set_xticklabels(['-1', '0', '1'], fontsize=10)
# y轴范围
ax.set_ylim(-0.2, len(y1)-0.2)
# y轴坐标刻度(具体表⽰成⼏个值,⽐如说0,1,2,3,4)
ax.set_yticks([0])
# y轴刻度标签赋到坐标刻度上
ax.set_yticklabels(['xxx'],fontsize=10)
# 画矩形框(别忘了在开头导⼊patches)
# 前两个参数是相对于(0,0)矩形的左下⾓坐标,0.4是矩形的宽度,0.3是矩形的⾼度
# 矩形四个点坐标(0.8,-0.15),(1.2,-0.15),(1.2,0.15),(0.8,0.15)
rect = patches.Rectangle((0.8,-0.15),0.4,0.3,linewidth=0.8,edgecolor='black',facecolor='none',zorder=3)
ax.add_patch(rect)
第六步,有些时候需要引⼊数据标签
前边设置的x1、y1值其实就代表了不同柱⼦在图形中的位置(坐标),通过for循环到每⼀个x1、y1值的相应坐标——a、b,再使⽤在对应位置添⽂字说明来⽣成相应的数字标签,⽽for循环也保证了每⼀个柱⼦都有标签。
其中,a-0.03, b表⽰在每⼀柱⼦对应x值左侧0.03处、y值标注⽂字说明 ,ha=‘center’, va= 'bottom’代表
horizontalalignment(⽔平对齐)、verticalalignment(垂直对齐)的⽅式,fontsize则是⽂字⼤⼩。
for a,b in zip(x1,y1):
<(a-0.03,b,a,ha='right',va='center',fontsize=14)
第七步,⽹格设置,保存图像,展⽰图像
# 背景中的⽹格,False为取消⽹格,True为显⽰⽹格
# savefig⼀定要在show之前,要不然就是空⽩图像,路径设置注意要⽤两个斜杠'\\' plt.savefig('D:\\test\\graph.png')
# 展⽰图像
plt.show()
PS:总结⼀下画⼦图
如果是分成上下两个规则的⼦图
plt.subplot(211)
定义图像,辅助显⽰参数等
plt.subplot(212)
定义图像,辅助显⽰参数等
如果是不规则划分⼦图,类似这样的
将整个表按照 2*2 划分
前两个简单, 分别是 (2, 2, 1) 和 (2, 2, 2)
但是第三个图呢, 他占⽤了 (2, 2, 3) 和 (2, 2, 4)显⽰需要对其重新划分, 按照 2 * 1 划分
前两个图占⽤了 (2, 1, 1) 的位置
因此第三个图占⽤了 (2, 1, 2) 的位置
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论