matplotlib绘图的完善及美化 |
您所在的位置:网站首页 › 如何美化图片 › matplotlib绘图的完善及美化 |
目录 matplotlib绘图的完善及美化 --0、导入基本库-- --1、完善标题-- --2、完善标签(图例标签设置)-- --3、轴标签说明设置-- --4、设置x与y轴的刻度范围-- --5、自定义每个刻度的显示标签-- --6、设置坐标轴的刻度间隔-- --7、网格设置-- --8、颜色,线型,点标记,透明度设置-- --9、添加注解-- --10、给图形上的坐标点添加注释-- --11、其他优化-- --12、图形样式的选择-- --13、绘制面板图、仪表板-- --14、案例-- matplotlib的绘图原理及流程详解,参考公众号上一文:matplotlib的绘图原理及流程详解 matplotlib绘图的完善及美化 --0、导入基本库-- import numpy as npimport pandas as pdimport matplotlib as mplimport matplotlib.pyplot as plt #最常用的绘图库 mpl.rcParams["font.family"]="SimHei" #使用支持的黑体中文字体mpl.rcParams["axes.unicode_minus"]=False # 用来正常显示负数 "-"plt.rcParams['font.sans-serif']=['SimHei'] # 用来正常显示中文标签# mpl.rcParams["font.style"]="normal" #设置标签风格,normal 常规(默认)/italic 斜体/oblique 倾斜# mpl.rcParams["font.size"]=11 #font.size 字体的大小(默认10)# % matplotlib inline #jupyter中用于直接嵌入图表,不用plt.show()import warningswarnings.filterwarnings("ignore") #用于排除警告 #用于显示使用库的版本print("numpy_" + np.__version__)print("pandas_" + pd.__version__)print("matplotlib_"+ mpl.__version__) --1、完善标题--在每个axes绘图后都应该添加一个title,使每个axes都有一个标题 默认添加一个title plt.title("TitleName") 当然可以通过局部设置美化我们的标题 参数说明: family=['SimHei','STSong','STXihei','NSimSun','STXihei',...]#字体 styles=['normal','italic','oblique']#字体的风格["常规(默认)","斜体字","倾斜自"] weights=['light','normal','medium','semibold','bold','heavy','black']#字体粗细 color=["white","black","red","blue","yellow","green",...]#字体颜色 size=[10,12,14,15,16,18,22,24,....]#字体大小 案例: font={"family":"SimHei","style":"normal","weight":"normal","color":"green","size":16} plt.title("TitleName",fontdict=font)#显示一个中文标题 x = range(1,11)y = np.random.rand(10)z = np.random.rand(10)*2figure = plt.figure(num="案例1",figsize=(16,9),facecolor="red",edgecolor="blue",frameon=True)font={"family":"SimHei","style":"normal","weight":"normal","color":"green","size":16} axes1 = plt.subplot(2,2,1)axes1.plot(x,z,label="折线图")plt.legend(loc="best")plt.title("图1",fontdict=font) axes2 = plt.subplot(2,2,2)axes2.bar(x,y,label="柱状图")plt.legend(loc="best")plt.title("图2",fontdict=font) axes3 = plt.subplot(2,2,3)axes3.scatter(x,y)plt.legend(range(1,11),loc="right",frameon=False,title="散点图",ncol=1)plt.title("图3",fontdict=font) axes4 = plt.subplot(2,2,4)axes4.pie(y)plt.legend(range(1,11),loc="right",frameon=False,title="饼图",ncol=1)plt.title("图4",fontdict=font) plt.show()--2、完善标签(图例标签设置)-- 在做图的时候,尤其是一个axes中有多个图形对象的时候,必须加上标签,才能区分每个图形表示的是什么。 方法1:在绘图的时候就加上标签,label="标签名称"plt.legend(loc="best")调用生成标签 x,y=list(range(1,13)),np.random.randint(50,100,12)plt.plot(x,y,label="2016年")plt.plot(list(range(1,13)),np.random.randint(50,100,12),label="2017年")plt.legend(loc="best")#调用生成标签plt.show()方法2:绘制完图片后,再使用plt.legend()生成标签 参数说明: ["标签名2","标签名3","标签名3",...]#一个axes中有几个表示不用意义的图就有几个标签名 loc=["best","upper","down","left","right","upperleft","upperright","downleft"...] #loc控制图例的显示位置,默认为best,即选择一个最好的位置。 frameon=[False,True]#是否显示边框 title="标签组的大标题"#给整个标签组起一个名 ncol=n#n是数字,表示标签组显示成多少个列 案例: x,y=list(range(1,13)),np.random.randint(50,100,12)x,y=list(range(1,13)),np.random.randint(50,100,12)plt.plot(x,y)plt.plot(list(range(1,13)),np.random.randint(50,100,12))plt.legend(["2018年","2019年"],loc="best",frameon=False,title="年降雨量",ncol=2)plt.show() --3、轴标签说明设置--plt.xlabel()设置x轴的标签说明。 plt.ylabel()设置y轴的标签说明。 每个axes对象都应该设置轴标签。 当然也可以通过局部设置美化我们的轴标签 案例: x,y=list(range(1,13)),np.random.randint(50,100,12)plt.plot(x,y)plt.plot(list(range(1,13)),np.random.randint(50,100,12))plt.legend(["2018年","2019年"],loc="best",frameon=False,title="年降雨量",ncol=2)font={"family":"SimHei","style":"normal","weight":"normal","color":"green","size":12}plt.xlabel("月",fontdict=font)plt.ylabel("降雨量",fontdict=font)plt.show( --4、设置x与y轴的刻度范围--plt.xlim(xmin, xmax) plt.ylim(ymin, ymax) x,y=list(range(1,13)),np.random.randint(50,100,12)plt.plot(x,y)plt.plot(list(range(1,13)),np.random.randint(50,100,12))plt.legend(["2018年","2019年"],loc="best",frameon=False,title="年降雨量",ncol=2)font={"family":"SimHei","style":"normal","weight":"normal","color":"green","size":12}plt.xlabel("月",fontdict=font)plt.ylabel("降雨量",fontdict=font)plt.xlim(0,12)plt.ylim(50,120)plt.show()plt.xlim([0,12]) plt.xlim(0,12) plt.xticks([原刻度标签列表],[新的刻度标签列表]) x,y=list(range(1,13)),np.random.randint(50,100,12)plt.plot(x,y)plt.plot(list(range(1,13)),np.random.randint(50,100,12))plt.legend(["2018年","2019年"],loc="best",frameon=False,title="年降雨量",ncol=2)font={"family":"SimHei","style":"normal","weight":"normal","color":"green","size":12}plt.xlabel("月",fontdict=font)plt.ylabel("降雨量",fontdict=font)plt.xlim(0,12)plt.ylim(50,120)plt.xticks([1,2,3,4,5,6,7,8,9,10,11,12],["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"])plt.show( --6、设置坐标轴的刻度间隔--from matplotlib.pyplot import MultipleLocator #从pyplot导入MultipleLocator类,这个类用于设置刻度间隔 x_major_locator=MultipleLocator(1) #把x轴的刻度间隔设置为1,并存在变量里 y_major_locator=MultipleLocator(20) #把y轴的刻度间隔设置为10,并存在变量里 ax=plt.gca() #ax为两条坐标轴的实例 ax.xaxis.set_major_locator(x_major_locator) #把x轴的主刻度设置为1的倍数 ax.yaxis.set_major_locator(y_major_locator) #把y轴的主刻度设置为10的倍数 x,y=list(range(1,13)),np.random.randint(50,100,12)plt.plot(x,y)plt.plot(list(range(1,13)),np.random.randint(50,100,12))plt.legend(["2018年","2019年"],loc="best",frameon=False,title="年降雨量",ncol=2)font={"family":"SimHei","style":"normal","weight":"normal","color":"green","size":12}plt.xlabel("月",fontdict=font)plt.ylabel("降雨量",fontdict=font)plt.xlim(1,12)plt.ylim(50,110) from matplotlib.pyplot import MultipleLocator#从pyplot导入MultipleLocator类,这个类用于设置刻度间隔x_major_locator=MultipleLocator(1)#把x轴的刻度间隔设置为1,并存在变量里y_major_locator=MultipleLocator(20)#把y轴的刻度间隔设置为10,并存在变量里ax=plt.gca()#ax为两条坐标轴的实例ax.xaxis.set_major_locator(x_major_locator)#把x轴的主刻度设置为1的倍数ax.yaxis.set_major_locator(y_major_locator)#把y轴的主刻度设置为10的倍数 plt.show() --7、网格设置--plt.grid(): 可以通过plt的grid方法来设置是否显示网格。 True为显示,False不显示。ax.grid(color='r',linestyle='-',linewidth=2) color:设置网格线颜色 axis:设置网格线显示x,y或者全部显示(x,y,both) linestyle:设置网格线形状 linewidth:设置网格线宽度 案例: plt.grid(True,color="g",axis="both",ls="--",lw=0.5)#设置网格线
我们可以在绘制图形时,显式指定图形的颜色,点标记或线条形状。具体设置可以查看帮助文档。 color(c):线条颜色。 linestyle(ls):线条形状。 linewidth(lw):线宽。 marker:点标记形状。 markersize(ms):点标记的大小。 markeredgecolor(mec):点边缘颜色。 markeredgewidth(mew):点边缘宽度。 markerfacecolor(mfc):点的颜色。 alpha:透明度(0-1之间) 说明: 颜色,点标记与线型可以使用一个组合参数进行设置。 颜色除了可以使用预设简写的字符之外,也可以使用全称(例如red)也可以使用RGB颜色表示。 颜色:[蓝色:'b'/绿色:'g'/红色:'r'/青色:'c'/品红:'m'/黄色:'y'/黑色:'k'/白色:'w'] 线型:[直线:'-'/虚线:'--'/点线:':'/点划线:'-.'] 点标记:[点:'.'/像素:','/圆:'o'/方形:'s'/三角形:'^'] 关于这三种样式的设置有一种简写的方式:颜色,线条样式,点标记样式"颜色线条样式点标记样式"====> 案例: x,y = list(range(1,13)),np.random.randint(50,100,12) plt.plot(x,y,"b:o",alpha=0.5) plt.plot(x,y,c="g",ls="--",lw=5,marker="o",ms=8,mec="r",mew=3,mfc="y",alpha=0.5) 我们可以在图形上绘制文本等说明信息(注解)。 方法1:普通文本(当前位置)--常用 plt.text():显示文本(基于坐标)如:plt.text(6,0,"年中") plt.figtext():显示文本(基于图片比例定位,左下角为原点)如:plt.figtext(0.5,0.5,"图片中央") x,y = list(range(1,13)),np.random.randint(50,100,12) plt.plot(x,y,"b:o",alpha=0.5)plt.text(6,50,"年中")plt.figtext(0.5,0.5,"图片中央")plt.show()方法2:连线位移(添加线条,在指定位置)--不常用 plt.arrow根据起点坐标(x,y)与各自轴的长度(x+dx,y+dy)绘制箭头。 width箭头尾部的宽度。 head_width箭头的宽度。 head_length箭头的长度。 案例: plt.arrow(6,100,-2,+5,width=0.1,head_width=0.1,head_length=0.1,color="r") plt.text(4,105,"年中") x,y = list(range(1,13)),np.random.randint(50,100,12)plt.plot(x,y,"b:o",alpha=0.5)plt.arrow(7,55,-1,-5,width=0.1,head_width=0.5,head_length=0.5,color="r")plt.text(7,55,"年中")plt.show(方法3:箭头与文本--常用 plt.annotate():显示箭头与文本。 xy箭头指向坐标 xytext文本起点坐标。(箭头尾部坐标) arrowprops字典类型,可设置箭头的属性。 facecolor箭头的颜色 headwidth箭头的宽度 width箭尾的宽度 shrink收缩大小 headlength箭头的长度 arrowstyle一些预设的箭头样式。当含有该参数时,上述4项参数将不再有效。 更多参数的使用方法自行搜索... 案例: plt.annotate("年中",xy=(6,100),xytext=(4,105), color="g",size=16,bbox=dict(fc="b",ec="g"), arrowprops=dict(width=3,facecolor="r",headwidth=10,shrink=0.01,headlength=10)) x,y = list(range(1,13)),np.random.randint(50,100,12)plt.plot(x,y,"b:o",alpha=0.5)plt.annotate("年中",xy=(6,50),xytext=(4,80),color="g",size=16,bbox=dict(fc="b",ec="g"),arrowprops=dict(width=3,facecolor="r",headwidth=10,shrink=0.01,headlength=10))plt.show()还有很多细节可以优化的,这些细节如图片的大小修改,绘图样式设置等,在作图的过程中根据实际需求查阅资料进行修改。 --12、图形样式的选择--matplotlib可以绘制很多图形折线图、饼图、箱线图、散点图、柱状图等,更具业务需求选择不同图形对应的函数即可, 每种图形的参数都大致相同,可以查看官网图例修改即可https://matplotlib.org/gallery.html --13、绘制面板图、仪表板--综合型的多个图形的组合图。 自定义创建figure,自定义创建多个axes(平铺式分布的axes,内嵌式分布的axes),去参考绘图流程的第2,3条。 可视化仪表板,关注公众后续更新!!! --14、案例-- a = range(1,11)b = np.random.rand(10)c = np.random.rand(10)*2figure = plt.figure(num="案例1",figsize=(16,9),facecolor="grey",edgecolor="blue",frameon=True)font={"family":"SimHei","style":"normal","weight":"normal","color":"black","size":16}aaxes1 = plt.subplot(2,2,1)axes1.plot(a,c,"r:o",alpha=0.5,label="折线图")plt.legend(loc="best")plt.title("图1",fontdict=font)#只添加yfor x, y in zip(a, c): # zip是将X,Y1分别传到x,y中,传两个 axes1.text(x, y + 0.01, '%.1f' % y, ha='center', va='bottom') # ha,va规定坐标表示的点,默认左下 axes2 = plt.subplot(2,2,2)axes2.bar(a,b,alpha=0.5,color="c",label="柱状图")plt.legend(loc="best")plt.title("图2",fontdict=font)#只添加yfor x, y in zip(a, b): # zip是将X,Y1分别传到x,y中,传两个 axes2.text(x, y + 0.01, '%.1f' % y, ha='center', va='bottom') # ha,va规定坐标表示的点,默认左下from matplotlib.pyplot import MultipleLocator#从pyplot导入MultipleLocator类,这个类用于设置刻度间隔x_major_locator=MultipleLocator(1)#把x轴的刻度间隔设置为1,并存在变量里y_major_locator=MultipleLocator(20)#把y轴的刻度间隔设置为10,并存在变量里ax=plt.gca()#ax为两条坐标轴的实例ax.xaxis.set_major_locator(x_major_locator)#把x轴的主刻度设置为1的倍数ax.yaxis.set_major_locator(y_major_locator)#把y轴的主刻度设置为10的倍数 axes3 = plt.subplot(2,2,3)axes3.scatter(a,b)plt.legend(range(1,11),loc="right",frameon=False,title="散点图",ncol=1)plt.title("图3",fontdict=font)plt.grid(True,color="g",axis="both",ls="--",lw=0.5)#设置网格线 axes4 = plt.subplot(2,2,4)axes4.pie(b,autopct='%1.1f%%')plt.legend(range(1,11),loc="right",frameon=False,title="饼图",ncol=1)plt.title("图4",fontdict=font) plt.show() |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |