python之matplotlib知识点总结

在这里立个flag,之后每一天希望自己有输入也有输出。奥里给!

前言:一方面是为了自己以后回顾,另一方面是监督自己每天学习!

准备工作

import matplotlib.pyplot as plt
import numpy as np

知识点补充一:

我这里都是用的ax.是因为刚开始学的时候看的一位大佬的教程,plt.没有了解过。

ax.意思是先生成一个画布,然后,我们在此画布上,选定一个子区域画了一个子图,上一张官方的图,看看你能不能更好的理解。

子图的理解:

fig=plt.figure(num=1,figsize=(4,4))
ax1=fig.add_subplot(221)#可从图中看到,我们的画布是分为2x2的区域,代表画布划分的行数和列数,最后一个1代表的是选中第一个子图
ax1.plot([1,2,3,4],[1,2,3,4])
ax2=fig.add_subplot(222)
ax2.plot([1,2,3,4],[2,2,3,4])
ax3=fig.add_subplot(223)
ax3.plot([1,2,3,4],[1,2,2,4])
ax4=fig.add_subplot(224)
ax4.plot([1,2,3,4],[1,2,3,3])

plt.show()
import matplotlib.gridspec as gridspec#调用网格

fig=plt.figure(num=1,figsize=(4,6))#创建画布
gs=gridspec.GridSpec(3,3)#设定网格,是3x3的大小

ax1=fig.add_subplot(gs[0,:]) #选定网格,第一行,所有列
ax1.plot([1,2,3,4],[1,2,3,4])

ax2=fig.add_subplot(gs[1,:-1]) # 选定网格,第二行,前两列
ax2.plot([1,2,3,4],[1,2,3,4])

ax3=fig.add_subplot(gs[1:,-1]) # 选定网格,后两行,最后一列
ax3.plot([1,2,3,4],[1,2,3,4])

ax4=fig.add_subplot(gs[2,0])# 选定网格,最后一行,第一列
ax4.plot([1,2,3,4],[1,2,3,4])

ax5=fig.add_subplot(gs[2,1]) # 选定网格,最后一行,第二列
ax5.plot([1,2,3,4],[1,2,3,4])

plt.show()

知识点补充二:中文显示问题

plt.rcParams["font.family"]="SimHei"

加入一行这个代码,我们的中文就能正确显示了,这行代码就是把我们的字体设置为“SimHei”中文黑体。除了字体设置还有以下属性:

rcParams的属性

属性

说明

‘font.family’

用来显示字体的名称

‘font.style’

字体风格,正常’normal’或斜体’italic’

‘font.size’

字体大小,整数字号或’large’、‘x-small’

字体的样式有以下选择

rcParams['font.family']1

中文字体

说明

‘SimHei’

中文黑体

‘Kaiti’

中文楷体

‘LiSu’

中文隶书

‘FangSong’

中文仿宋

‘YouYuan’

中文幼圆

‘STSong’

华文宋体

除了在全局设置字体外,我们也可以在特征显示中文的位置设置一个属性fontproperties,这个,我们讲到再给大家演示。

步骤一:写出要画的x和y的值,这里举例:

app=[78,80,79,81,91,95,96]
x=np.arange(1,8)

这里我们得到了:纵坐标:app =[78, 80, 79, 81, 91, 95, 96 ] 横坐标: x =[1 2 3 4 5 6 7]

步骤二:先画图,后续调整

fig=plt.figure(num=1,figsize=(6,4)) # 生成一个画布

ax=fig.add_subplot(111)# 选中第一行第一列
ax.plot(x,app)# 生成图片

plt.show()# 显示图片

其中:

  • plt.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True)

  • num:图像编号或名称,数字为编号 ,字符串为名称

  • figsize:指定figure的宽和高,单位为英寸;

  • dpi参数指定绘图对象的分辨率,即每英寸多少个像素,缺省值为80 1英寸等于2.5cm,A4纸是 21*30cm的纸张

  • facecolor:背景颜色

  • edgecolor:边框颜色

  • frameon:是否显示边框

步骤三:设置刻度范围,显示的刻度,刻度标签

#函数里的参数,是根据我们的例子特定设置的,不同问题,不同的设置,需要看图片效果,找参数

#设置刻度范围
ax.set_xlim(1,7.1)#设置x轴的区间范围  x轴从1到7.1
ax.set_ylim(40,100)#设置y轴的区间范围 y轴从40到100

#设置显示的刻度
ax.set_xticks(np.linspace(1,7,7))#np.linspace()函数为等差数列,1至7的7个数组成的等差数列1,2,3,4,5,6,7,
ax.set_yticks(np.linspace(50,100,6))#关于等差数列,想了解的可以参看numpy的用法

#设置刻度标签
ax.set_xticklabels(["星期一","星期二","星期三","星期四","星期五","星期六","星期日"],fontproperties="SimHei",fontsize=12)
#这里用到了属性fontproperties可以单独设置x轴标签的字体,也可以用fontsize设置字体大小,还可以用color设置字的颜色

ax.set_yticklebels(["50kg","60kg","70kg","80kg","90kg","100kg"],fontsize=12)

步骤四:装饰一下轴上的刻度线

#将此代码插入到之前的代码中即可
ax.tick_params(left=False,pad=8,direction="in",length=2,width=3,color="b",labelsize=12)
ax.tick_params("x",labelrotation=10)#类标旋转
  • axis: 可选"x","y","both",默认"both",分别代表,对x轴操作,对y轴操作,对两个轴都操作。

  • direction: 可选"in","out","inout"代表,刻度线显示在坐标轴里面,坐标轴外边,双边

  • length: 刻度线长度,上面图里的刻度线长度,我设置的为6

  • color: 刻度线颜色,上面图里的刻度线颜色,我设置的为“r”

  • width: 刻度线宽度

  • pad: 刻度线与刻度标签之间的间隔

  • bottom, top, left, right四个参数对应四个边框,它们的取值为布尔类型,True 表示显示对应边框上的刻度线,False,代表不显示,默认True

  • labelbottom, labeltop, labelleft, labelright,与上面四个对应,代表的是四个边框上的类标的设置,取值为布尔类型,True代表显示对应边框上的类标,False代表不显示。

  • labelsize: 类标大小的设置参数,可取浮点型数值,也可去"medium","large","small"

  • labelrotation: 旋转类标一定的角度,与在set_xticklabels()中的参数rotation作用相同。

步骤五:添加轴坐标标签,表头

ax.set_xlabel("星期")#添加x轴坐标标签,后面看来没必要会删除它,这里只是为了演示一下。
ax.set_ylabel("销售量",fontsize=16)#添加y轴标签,设置字体大小为16,这里也可以设字体样式与颜色

ax.set_title("某某水果店一周水果销售量统计图",fontsize=18,backgroundcolor='#3c7f99',fontweight='bold',color='white',verticalalignment="baseline")#标题(表头)

使用到的set_title()参数有很多,介绍几个常用的

  • fontsize: 默认12,可选参数还有['xx-small', 'x-small', 'small', 'medium', 'large','x-large', 'xx-large']

  • backgroundcolor: 背景颜色

  • fontweight: 字体粗细,可选参数为['light', 'normal', 'medium', 'semibold', 'bold', 'heavy', 'black']

  • color: 字体颜色

  • fontstyle: 设置字体类型,可选参数[ 'normal' | 'italic' | 'oblique' ],italic斜体,oblique倾斜

  • verticalalignment: 设置水平对齐方式 ,可选参数 : 'center' , 'top' , 'bottom' ,'baseline'

此参数可设置title与正图的位置 。

步骤六:删除掉上轴和右轴

#ax.spines["left"].set_color("darkblue")#设置左轴的颜色,我们图中未用
#ax.spines["bottom"].set_linewidth(3)#底轴线条宽度设置
ax.spines["top"].set_visible(False)#上轴不显示
ax.spines["right"].set_visible(False)#右
ax.spines["left"].set_visible(False)#左

步骤七:图例添加legend()

ax.legend(("苹果"),loc=3,labelspacing=2,handlelength=4,fontsize=14,shadow=True)
##一般添加图例时,会在画图的函数里,比如ax.plot()函数中添加一个label参数,则后面直接ax.legend(loc="")
##不需要第一个参数了。
###loc的可取"best",1或者"upper right",2或"upper left",3或"lower left",4或"lower right",代表放不同位置

更新为以下:

ax.plot(x,app,label="苹果")
ax.legend(loc=3,labelspacing=2,handlelength=3,fontsize=14,shadow=True)
  • loc: 可取"best", 1或者"upper right", 2或"upper left", 3或"lower left", 4或"lower right",代表放不同位置

  • fontsize: int或float或{‘xx-small’, ‘x-small’, ‘small’, ‘medium’, ‘large’, ‘x-large’, ‘xx-large’},字体大小

  • shadow: 是否为图例边框添加阴影

  • labelspacing: 图例中条目之间的距离

  • handlelength: 图例句柄的长度

步骤八:修改曲线格式

#ax.plot(x,app,label="苹果")
ax.plot(x,app,"r-.d",label="苹果")#在原来的基础上添加“r-.d”
  • x: x轴数据,列表或数组,可选参数,当我们在这个函数里,只展示一组数据时,x可省略。

  • y: y轴数据,必须有。

  • format_string: 主要来控制我们画的曲线的格式:颜色,风格,标记,可取三者的组合如:“g-o”, "r-.D",如果不用组合,则用color,marker,linestyle,三个参数分别指定。

  • label: 添加图例的类标。

步骤九:保存图片

#保存为jpg文件
plt.savefig("figure.jpg")#我这里填的是相对路径,如果想保存在指定文件夹下,填写绝对路径。
#保存为png文件
plt.savefig("figure.png")

总结:

import matplotlib.pyplot as plt
import numpy as np
plt.rcParams["font.family"]="SimHei"
app=[78,80,79,81,91,95,96]
ban=[70,80,81,82,75,90,89]
x=np.arange(1,8)

fig=plt.figure(num=1,figsize=(6,4))
ax=fig.add_subplot(111)

ax.plot(x,app,"r-.d",label="苹果")
ax.plot(x,ban,"c-d",label="香蕉")

ax.set_xlim([1,7.1])
ax.set_ylim([40,100])

ax.set_xticks(np.linspace(1,7,7))
ax.set_yticks(np.linspace(50,100,6))#可调控字体大小,样式,

ax.set_xticklabels(["星期一","星期二","星期三","星期四","星期五","星期六","星期日"],fontproperties="SimHei",fontsize=12)
ax.set_yticklabels(["50kg","60kg","70kg","80kg","90kg","100kg"])

ax.tick_params(left=False,pad=8,direction="in",length=2,width=3,color="b",labelsize=12)
ax.tick_params("x",labelrotation=10)#类标旋转

ax.set_xlabel("星期")#添加x轴坐标标签,后面看来没必要会删除它,这里只是为了演示一下。
ax.set_ylabel("销售量",fontsize=16)#添加y轴标签,设置字体大小为16,这里也可以设字体样式与颜色
ax.set_title("某某水果店一周水果销售量统计图",fontsize=18,backgroundcolor='#3c7f90',\
fontweight='bold',color='white',verticalalignment="baseline")

#ax.spines["left"].set_color("darkblue")#设置左轴的颜色
#ax.spines["bottom"].set_linewidth(2)#底轴线条宽度设置
ax.spines["top"].set_visible(False)#上轴不显示
ax.spines["right"].set_visible(False)
ax.spines["left"].set_visible(False)

ax.legend(loc=3,labelspacing=1,handlelength=3,fontsize=14,shadow=True)
plt.savefig("图1.jpg")
plt.show()

补充一:条形图:

bar(x,height,width,align,*kwargs)函数:

X(之前为left)

x轴坐标

int,float,一般为数组或列表

height

条形的高度

同x

width

条形宽度

0~1,默认0.8

linewidth

边框宽度

int,默认无

color

条形颜色

默认"b"

edge color

边框颜色

同color

alpha

边框颜色

同color

bottom

条形的起始位置

默认0

log

y轴是否使用科学计数法表示

False,True

orientation

是水平条还是竖直条

水平: “vertial”,竖直: “horizontal”

tick_label

下标的标签,也可以单独设置

str,数组或列表

label

图形的图例说明

str

#先导入函数
import matplotlib.pyplot as plt
import numpy as np
#设置中文可显示字体
plt.rcParams["font.family"]="SimHei"
app=[70,72,70,81,91,95,96]

#设置画布,添加子图
fig=plt.figure(num=1,figsize=(8,6))
ax=fig.add_subplot(111)
#画条形图
#ax.bar(x=np.arange(1,8,1),height=app)
#条形图有点紧密,我修改一下它的x,给每一个条形一个颜色,嘻嘻,作一下!
#镶个边,添加一个图例标签
ax.bar(x=np.arange(1,14,2),height=app,color=["mistyrose","lightcoral","indianred","firebrick","brown","darkred","maroon"],bottom=0,edgecolor="gold",label="苹果",linewidth=2,width=1,alpha=1)
##添加一下函数,都是之前讲过的,有不懂得,回去翻翻哈。
ax.set_ylim([50,100])

ax.set_ylabel("苹果销售量",fontsize=18)

ax.set_xticks(np.linspace(1,13,7))
ax.set_yticks(np.linspace(60,100,5))

ax.set_xticklabels(["星期一","星期二","星期三","星期四","星期五","星期六","星期日"],fontsize=12)
ax.set_yticklabels(["60kg","70kg","80kg","90kg","100kg"],fontsize=12)

    
ax.spines["top"].set_visible(False)#上轴不显示
ax.spines["right"].set_visible(False)
ax.spines["left"].set_visible(False)
ax.spines["bottom"].set_color("gold")
ax.spines["bottom"].set_linewidth(3)#底轴线条宽度设置
#ax.spines["bottom"].set_linestyle("--")#这里可以设置线条的类型。这是增加的哈,之前没讲。  


ax.tick_params(pad=4,left=False)
ax.tick_params(axis="x",labelrotation=10)

ax.set_title("某某水果店一周水果销售量统计图",fontsize=18,backgroundcolor='yellowgreen',\
fontweight='bold',color='white')

ax.yaxis.grid(linewidth=0.5,color="black",alpha=0.5)
ax.set_axisbelow(True)#网格显现在图形下方,

plt.show()

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值