目录
1、Matplotlib 简介
Matplotlib 简介
如何使用Matplotlib
Matplotlib绘制图形
2、Matplotlib图形绘制
1)折线图
2)柱状图
3)条形图
3)饼图
4)散点图
6)箱型图
7)更新内容
如何设置坐标轴的刻度
如何调整子图之间的间距
pip install matplotlib
!pip install matplotlib
import matplotlib.pyplot as plt #plt是别名
折线图 | plot |
柱状图 | bar |
条形图 | barh |
饼图 | pie |
散点图 | scatter |
直方图 | hist |
箱形图 | boxplot |
子图 | subplot |
plt.figure(figsize=(10,6))#调整画布大小
plt.plot(data["日期"],data["自配送销售额"],color='y')#通过color调整颜色
plt.xticks(rotation=45)#x轴倾斜的角度
plt.show()
其中颜色可以设置成很多,下表为部分:
'r' | 红色 |
'g' | 绿色 |
'b' | 蓝色 |
'c' | 青色 |
'm' | 品红 |
'y' | 黄色 |
'k' | 黑色 |
'w' | 白色 |
浅粉红 | #FFB6C1 |
猩红 | #DC143C |
最底下为rgb颜色值,可以查看RGB颜色值与十六进制颜色码转换工具里边比较详细
plt.figure(figsize=(10,5))
plt.plot(data["日期"],data["总销售额"],color='r',linewidth=0.5,marker="*",linestyle='-.')
plt.plot(data["日期"],data["FBA销售额"],color='g',linewidth=0.5,marker="2",linestyle='-')
plt.plot(data["日期"],data["自配送销售额"],color='y',linewidth=0.5,marker="s",linestyle='--')
plt.xticks(rotation=45)#旋转x轴标注
font = {
"family":"kaiti", # 设置字体的样式
"size":"20" # 设置字体的大小
}
plt.rc("font",**font)
#设置X轴标签
plt.xlabel("时间")
#设置y轴标签
plt.ylabel("数额")
plt.show()
#linewidth是设置线的宽度
#marker是设置线的拐点标记样式
常用字体名称:
楷体 | kaiti |
黑体 | SimHei |
微软雅黑 | Microsoft YaHei |
新宋体 | NSimSun |
仿宋_GB2312 | FangSong_GB2312 |
楷体_GB2312 | KaiTi_GB2312 |
常用线型:
实线 | '-' |
点虚线 | ':' |
破折线 | '--' |
点划线 | '-.' |
不画线 | '' 或 ' ' |
常用标记:
点 | "." |
上三角 | "^" |
上三叉 | "2" |
正方形 | "s" |
星号 | "*" |
菱形 | "D" |
渲染指定的字符。例如 "$f$" 以字母 f 为标记。 | '$...$' |
柱形图,又称长条图、柱状统计图(德文: Säulendiagramm、英文:bar chart、西班牙文: diagrama de barras)亦称条图、条状图、棒形图,是一种以长方形的长度为变量的统计图表。长条图用来比较两个或以上的价值(不同时间或者不同条件),只有一个变量,通常利用于较小的数据集分析。长条图亦可横向排列,或用多维方式表达。
matplotlib.pyplot.bar(x, height, width=0.8, bottom=None, *, align='center', data=None, **kwargs)
参数说明:
x:浮点型数组,柱形图的 x 轴数据。
height:浮点型数组,柱形图的高度。
width:浮点型数组,柱形图的宽度。
bottom:浮点型数组,底座的 y 坐标,默认 0。
align:柱形图与 x 坐标的对齐方式,'center' 以 x 位置为中心,这是默认值。 'edge':将柱形图的左边缘与 x 位置对齐。要对齐右边缘的条形,可以传递负数的宽度值及 align='edge'。
**kwargs::其他参数。
plt.figure(figsize=(10,5))
plt.bar(data["排序"],data["销量"])
##调整画布外框颜色 上:top 下: bottom 左:left 右:right
ax=plt.gca()
ax.spines["top"].set_color("w")
ax.spines["bottom"].set_color("r")
ax.spines["left"].set_color("r")
ax.spines["right"].set_color("w")
##调整x、y轴刻度
plt.xlim(data.index.values[0],data.index.values[-1]) #x轴从0开始到最后一个 0第一个 -1最后一个
plt.ylim(np.min(data["销量"]),np.max(data["销量"])) #最小到最大
plt.show()
条形图(bar chart)是用宽度相同的条形的高度或长短来表示数据多少的图形。条形图可以横置或纵置,纵置时也称为柱形图(column chart)。此外,条形图有简单条形图、复式条形图等形式。
plt.figure(figsize=(10,5))
plt.barh(data["排序"],data["销量"])
##调整画布外框颜色 上:top 下: bottom 左:left 右:right
ax=plt.gca()
ax.spines["top"].set_color("w")
ax.spines["bottom"].set_color("r")
ax.spines["left"].set_color("r")
ax.spines["right"].set_color("w")
##调整x、y轴刻度
plt.xlim(np.min(data["销量"]),np.max(data["销量"])) #x轴从0开始到最后一个 0第一个 -1最后一个
plt.ylim(data.index.values[0],data.index.values[-1]) #最小到最大
plt.show()
matplotlib.pyplot.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=0, radius=1, counterclock=True, wedgeprops=None, textprops=None, center=0, 0, frame=False, rotatelabels=False, *, normalize=None, data=None)[source]
参数说明:
x:浮点型数组,表示每个扇形的面积。
explode:数组,表示各个扇形之间的间隔,默认值为0。
labels:列表,各个扇形的标签,默认值为 None。
colors:数组,表示各个扇形的颜色,默认值为 None。
autopct:设置饼图内各个扇形百分比显示格式,%d%% 整数百分比,%0.1f 一位小数, %0.1f%% 一位小数百分比, %0.2f%% 两位小数百分比。
labeldistance:标签标记的绘制位置,相对于半径的比例,默认值为 1.1,如 <1则绘制在饼图内侧。
pctdistance::类似于 labeldistance,指定 autopct 的位置刻度,默认值为 0.6。
shadow::布尔值 True 或 False,设置饼图的阴影,默认为 False,不设置阴影。
radius::设置饼图的半径,默认为 1。
startangle::起始绘制饼图的角度,默认为从 x 轴正方向逆时针画起,如设定 =90 则从 y 轴正方向画起。
counterclock:布尔值,设置指针方向,默认为 True,即逆时针,False 为顺时针。
wedgeprops :字典类型,默认值 None。参数字典传递给 wedge 对象用来画一个饼图。例如:wedgeprops={'linewidth':5} 设置 wedge 线宽为5。
textprops :字典类型,默认值为:None。传递给 text 对象的字典参数,用于设置标签(labels)和比例文字的格式。
center :浮点类型的列表,默认值:(0,0)。用于设置图标中心位置。
frame :布尔类型,默认值:False。如果是 True,绘制带有表的轴框架。
rotatelabels :布尔类型,默认为 False。如果为 True,旋转每个 label 到指定的角度。
plt.figure(figsize=(10,5))
sum_sale=np.sum(data["总销售额"])
font={
"family":"kaiti"
,"size":"15"
}
plt.rc("font",**font)
fba_sale=np.sum(data["FBA销售额"])
self_sale=np.sum(data["自配送销售额"])
plt.pie([sum_sale,fba_sale,self_sale]
,labels=["总销售额","FBA销售额","自配送销售额"]
,colors=["m","b","g"] #设置饼图颜色
,shadow=True #是否设置阴影
,labeldistance=1.2 #标签距图表的距离
,autopct="%.2f%%" ##设置显示数字样式
,startangle=60 ##旋转角度
,explode=[0.1,0,0]
)
plt.title("统计",loc="center")#center中间
plt.show()
matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, *, edgecolors=None, plotnonfinite=False, data=None, **kwargs)
参数说明:
x,y:长度相同的数组,也就是我们即将绘制散点图的数据点,输入数据。
s:点的大小,默认 20,也可以是个数组,数组每个参数为对应点的大小。
c:点的颜色,默认蓝色 'b',也可以是个 RGB 或 RGBA 二维行数组。
marker:点的样式,默认小圆圈 'o'。
cmap:Colormap,默认 None,标量或者是一个 colormap 的名字,只有 c 是一个浮点数数组的时才使用。如果没有申明就是 image.cmap。
norm:Normalize,默认 None,数据亮度在 0-1 之间,只有 c 是一个浮点数的数组的时才使用。
vmin,vmax::亮度设置,在 norm 参数存在时会忽略。
alpha::透明度设置,0-1 之间,默认 None,即不透明。
linewidths::标记点的长度。
edgecolors::颜色或颜色序列,默认为 'face',可选值有 'face', 'none', None。
plotnonfinite::布尔值,设置是否使用非限定的 c ( inf, -inf 或 nan) 绘制点。
**kwargs::其他参数。
plt.scatter(data["平均单个订单成本"],data["订单额"]
, color=("red","green","black","orange","purple","beige","cyan","magenta","cyan","magenta")#设置球的颜色
,s=data["订单额"]#设置球的大小
,marker="h"#设置球的形状
,linewidths=4#设置球边界的宽度
,edgecolors='b'#设置边界的颜色
,alpha=0.5#设置透明度
)#设置球的形状
plt.xlabel("订单成本")
plt.ylabel("订单额")
plt.show()
5)直方图
直方图(Histogram),又称质量分布图,是一种统计报告图,由一系列高度不等的纵向条纹或线段表示数据分布的情况。 一般用横轴表示数据类型,纵轴表示分布情况。
plt.figure(figsize=(20,5))
data1 = data[data["数量"]>20]
plt.hist(data1["数量"],
bins=data1.index.values[-1] #xz轴上展示多少
,align = "mid"
, density=True#频率频数设置
)
plt.xlim(10)
plt.show()
plt.boxplot(data[data["销量"]<3000]["销量"])
plt.show()
横线上边的可以看做是异常值,也叫离群点 ,横线是上限值,依次往下是上4分位、中位数、下4分位数、下限
- 上4分位数的意思是全部数据中有4分之一的数据比它大
-下4分位数的意思是全部数据中有4分之一的数据比它小
- 中位数的意思就是位于中间的数据
-上4分位减去下4分位数代表着4分位的间距,那么异常值(离群点)就是大于 (上四分位 + 1.5 * 四分位间距) 或小于(下4分位 - 1.5*四分位间距)的数字
- 上限值就是等于(上4分位 + 1.5 * 四分位间距)的值
多个箱型图绘制
dataa = [data[data["销量"]<2000]["销量"],data[data["销量"]<3000]["销量"]]
plt.boxplot(dataa # dataa中包含多少元素 就会绘制几个箱型图
,notch=True # 是否展示凹口
,sym="*" # 设置异形点的形状
,vert=False # 箱型图的摆放方式,True就是垂直,False就是横着
,whis=2 # 定义异常,默认是1.5这个参数也就是上下四分位距离的倍数
,labels=["箱型图a","箱型图b"] # 说明
,showmeans=True # 展示平均值
,meanline=True # 以线的形式来展示平均值,前提是showmeans=True
,showfliers=True # 是否显示异常值
,meanprops=dict(markerfacecolor="r", marker="s")
,widths=0.5
)
plt.show()
7)子图
我们可以使用 pyplot 中的 subplot() 和 subplots() 方法来绘制多个子图。
subplot() 方法在绘图时需要指定位置,subplots() 方法可以一次生成多个,在调用时只需要调用生成对象的 ax
subplots() 方法语法格式如下:
matplotlib.pyplot.subplots(nrows=1, ncols=1, *, sharex=False, sharey=False, squeeze=True, subplot_kw=None, gridspec_kw=None, **fig_kw)
plt.figure(figsize=(10,5))#设置画布大小
x=np.arange(1,200)
plt.subplot(221)#在第一个位置画折线图
plt.plot(x,x+x)
plt.subplot(222)#第二个位置绘制散点图
plt.scatter(np.arange(0,20),np.random.rand(20))
plt.subplot(223)#第三个位置绘制饼图
plt.pie(x=[1,2,3,4],labels=['a','b','c','d'])
plt.subplot(224)#第四个位置绘制柱状图
plt.bar(x=[1,2,3,4],height=[2,3,6,5])
plt.show()
现有一张图片,我想让他X轴以刻度间距为1显示,我应该怎么办那?
plt.figure(figsize=(15,10))
from matplotlib.pyplot import MultipleLocator
##寻找最佳K值
from sklearn.model_selection import cross_val_score
k_range = range(1,30)
k_error = []
x=iris.data
y=iris.target
# 循环取 看误差效果
for k in k_range:
knn = KNeighborsClassifier(n_neighbors=k)
# cv参数也是划分训练集和测试集
scores = cross_val_score(knn,x,y,cv=6)
k_error.append(1-scores.mean())
plt.plot(k_range,k_error)
x_major_locator=MultipleLocator(1)
ax=plt.gca()
ax.xaxis.set_major_locator(x_major_locator)
plt.xlabel('k的值')
plt.ylabel('错误')
plt.xlim(0)
plt.show()
如图所示问题解决
如图所示,现在子图已经交叉在一起了,不利于我们的可是化,如何调整图片之间的间距?
fig.subplots_adjust(wspace=0.3,hspace=0.5)
问题解决