在这里立个flag,之后每一天希望自己有输入也有输出。奥里给!
前言:一方面是为了自己以后回顾,另一方面是监督自己每天学习!
准备工作
import matplotlib.pyplot as plt
import numpy as np
知识点补充一:
我这里都是用的ax.是因为刚开始学的时候看的一位大佬的教程,plt.没有了解过。
ax.意思是先生成一个画布,然后,我们在此画布上,选定一个子区域画了一个子图,上一张官方的图,看看你能不能更好的理解。
![](https://img-blog.csdnimg.cn/img_convert/0318f50ce7ac24afdeb90a641bf28364.jpeg)
子图的理解:
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()
![](https://img-blog.csdnimg.cn/img_convert/443d3a3b199b676a11ce6896db237f4c.jpeg)
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()
![](https://img-blog.csdnimg.cn/img_convert/1d58dc6168dcb6e4df27e0a016522db8.jpeg)
知识点补充二:中文显示问题
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()