目录
一、figure
二、plot
三、savefig
四、show
五、xticks
六、xlable和ylable
七、title
八、grid
九、plot绘制多条线
十、legend
十一、scatter
十二、bar
十三、barh
十四、绘制直方图
Python的底层绘图库,主要做数据可视化图表
Pyplot 是 Matplotlib 的子库,提供了和 MATLAB 类似的绘图 API。
Pyplot 是常用的绘图模块,能很方便让用户绘制 2D 图表。
Pyplot 包含一系列绘图函数的相关函数,每个函数会对当前的图像进行一些修改,例如:给图像加上标记,生新的图像,在图像中产生新的绘图区域等等。
使用的时候,我们可以使用 import 导入 pyplot 库,并设置一个别名 plt:
from matplotlib import pyplot as plt
实例
from matplotlib import pyplot as plt
x = range(2,26,2)
y = [15,13,14.5,17,20,25,26,26,24,22,18,15]
plt.plot(x,y)
plt.show()
可以理解为绘图之前,布置一张合适的画板,设置图片的大小,分辨率
函数定义如下
figure(num=None, # autoincrement if None, else integer from 1-N figsize=None, # defaults to rc figure.figsize dpi=None, # defaults to rc figure.dpi facecolor=None, # defaults to rc figure.facecolor edgecolor=None, # defaults to rc figure.edgecolor frameon=True, FigureClass=Figure, clear=False, **kwargs )
figsize:设置画板的长,宽。是一个元组
dpi:在图像模糊时可以传入dpi参数,使图像更清晰
代码实例
fig = plt.figure(figsize=(20,8),dpi=80)
绘制图的形状
函数定义如下
def plot(*args, scalex=True, scaley=True, data=None, **kwargs):
# 画单条线
plot([x], y, [fmt], *, data=None, **kwargs)
# 画多条线
plot([x], y, [fmt], [x2], y2, [fmt2], ..., **kwargs)
参数说明:
>>> plot(x, y) # 创建 y 中数据与 x 中对应值的二维线图,使用默认样式
>>> plot(x, y, 'bo') # 创建 y 中数据与 x 中对应值的二维线图,使用蓝色实心圈绘制
>>> plot(y) # x 的值为 0..N-1
>>> plot(y, 'r+') # 使用红色 + 号
颜色字符color:'b' 蓝色,'m' 洋红色,'g' 绿色,'y' 黄色,'r' 红色,'k' 黑色,'w' 白色,'c' 青绿色,'#008000' RGB 颜色符串。多条曲线不指定颜色时,会自动选择不同颜色。
线型参数linestyle:'‐' 实线,'‐‐' 破折线,'‐.' 点划线,':' 虚线。
标记字符:'.' 点标记,',' 像素标记(极小点),'o' 实心圈标记,'v' 倒三角标记,'^' 上三角标记,'>' 右三角标记,'<' 左三角标记...等等。
将绘制的图保存到本地
plt.savefig("./img.png") #保存图片
可以保存为svg矢量图格式,放大不会有锯齿
plt.show() #显示绘制的图片
设置x轴的刻度
_xtick_label = [i/2 for i in range(4,49)]
plt.xticks(_xtick_label)
from matplotlib.font_manager import FontProperties # 导入FontProperties
my_font = FontProperties(fname="C:\Windows\Fonts\simkai.ttf", size=14) # 设置中文字体
_xtick_labels = ["10点{}分".format(i) for i in range(60)]
_xtick_labels += ["11点{}分".format(i) for i in range(60)]
plt.xticks(list(x)[::3],_xtick_labels[::3],rotation=270,fontproperties=my_font)
添加x和y轴的标签
plt.ylabel("温度",fontproperties=my_font)
设置该图的标题
plt.title("10点到12点每分钟气温变化情况",fontproperties=my_font)
设置图表中的网格线
def grid(visible=None, which='major', axis='both', **kwargs):
color:'b' 蓝色,'m' 洋红色,'g' 绿色,'y' 黄色,'r' 红色,'k' 黑色,'w' 白色,'c' 青绿色,'#008000' RGB 颜色符串。
linestyle:'‐' 实线,'‐‐' 破折线,'‐.' 点划线,':' 虚线。
linewidth:设置线的宽度,可以设置一个数字。
alpha:设置透明度
#绘制网格
plt.grid()
x1 = np.array([0, 1, 2, 3])
y1 = np.array([3, 7, 5, 9])
x2 = np.array([0, 1, 2, 3])
y2 = np.array([6, 2, 13, 10])
plt.plot(x1, y1, x2, y2)
添加图例
plt.plot(x1, y1,label="自己")
plt.plot(x2, y2,label="同桌")
#添加图例
plt.legend(prop=my_font,loc="upper right")
参数介绍:
prop:设置字体格式
loc:
=============== ============= Location String Location Code =============== ============= 'best' 0 'upper right' 1 'upper left' 2 'lower left' 3 'lower right' 4 'right' 5 'center left' 6 'center right' 7 'lower center' 8 'upper center' 9 'center' 10 =============== =============
绘制散点图
def 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::其他参数。
y_3 = [11,17,16,11,12,11,12,6,6,7,8,9,12,15,14,17,18,21,16,17,20,14,15,15,15,19,21,22,22,23,24]
y_10 = [26,26,28,19,21,17,16,19,18,20,20,19,22,23,17,20,21,20,22,15,11,15,3,13,17,10,11,10,10,5,3]
x_3 = range(1,32)
x_10 = range(51,82)
colors = [0, 10, 20, 30, 40, 45, 50, 55, 60, 70, 80, 90, 100,10, 20, 30, 40, 45, 50, 55, 60, 70, 80, 90, 100,110,120,130,140,150,160]
plt.scatter(x_3,y_3,c=colors,cmap='viridis')
plt.scatter(x_10,y_10,c=colors,cmap='viridis')
用来绘制条形图
from matplotlib import pyplot as plt
from matplotlib.font_manager import FontProperties # 导入FontProperties
my_font = FontProperties(fname="C:\Windows\Fonts\simkai.ttf", size=14) # 设置字体
fig = plt.figure(figsize=(20,15),dpi=80)
a = ["战狼2","速度与激情8","功夫熊猫","西游伏魔篇"]
b = [56.01,26.94,17.54,16.49]
plt.bar(range(len(a)),b,width=0.3)
plt.xticks(range(len(a)),a,fontproperties=my_font,rotation=90)
plt.savefig("./img.png")
plt.show()
绘制多次条形图
from matplotlib import pyplot as plt
import numpy as np
from matplotlib.font_manager import FontProperties # 导入FontProperties
my_font = FontProperties(fname="C:\Windows\Fonts\simkai.ttf", size=14) # 设置字体
fig = plt.figure(figsize=(20,8),dpi=80)
a = ["战狼2","速度与激情8","功夫熊猫","西游伏魔篇"]
b_14 = [2358,399,2358,362]
b_15 = [123457,156,2045,168]
b_16 = [15746,312,4497,319]
bar_width = 0.2
x_14 = list(range(len(a)))
x_15 = [i + bar_width for i in x_14]
x_16 = [i + bar_width * 2 for i in x_14]
plt.bar(range(len(a)),b_14,width=bar_width,label="9月14日")
plt.bar(x_15,b_15,width=bar_width,label="9月15日")
plt.bar(x_16,b_16,width=bar_width,label="9月16日")
plt.legend(prop=my_font)
plt.xticks(x_15,a,fontproperties=my_font)
plt.savefig("./img.png")
plt.show()
绘制横向条形图
a = ["战狼2","速度与激情8","功夫熊猫","西游伏魔篇"]
b = [56.01,26.94,17.54,16.49]
plt.barh(range(len(a)),b,height=0.3,color="#EEEE00")
plt.yticks(range(len(a)),a,fontproperties=my_font)
plt.grid(alpha=0.3)
组距:指每个小组的两个端点间的距离
组数 极差组距 = (max(a) - min(a)) bin_width
def hist( x, bins=None, range=None, density=False, weights=None, cumulative=False, bottom=None, histtype='bar', align='mid', orientation='vertical', rwidth=None, log=False, color=None, label=None, stacked=False, *, data=None, **kwargs):
from matplotlib import pyplot as plt
from matplotlib.font_manager import FontProperties # 导入FontProperties
my_font = FontProperties(fname="C:\Windows\Fonts\simkai.ttf", size=14) # 设置字体
fig = plt.figure(figsize=(20,8),dpi=80)
a = [120,98,125,131,124,139,131,117,128,108,135,138,131,102,107,114,119,128,128,141]
d = 5 #组数
num_bins = (max(a) - min(a)) // d;
plt.hist(a,num_bins)
plt.xticks(range(min(a),max(a)+d,d))
plt.grid()
plt.savefig("./img.png")
plt.show()
频数图
当d不能被整除时,会有一些偏移
绘制频率图
设置参数 normed=True
plt.hist(a,num_bins,normed=True)
频率图
用bar绘制直方图
from matplotlib import pyplot as plt
from matplotlib.font_manager import FontProperties # 导入FontProperties
my_font = FontProperties(fname="C:\Windows\Fonts\simkai.ttf", size=14) # 设置字体
fig = plt.figure(figsize=(20,8),dpi=80)
interval = [0,5,10,15,20,25,30,35,40,45,60,90]
width = [5,5,5,5,5,5,5,5,5,15,30,60]
quantity = [836,2737,3723,3926,3596,1438,3273,642,824,613,215,47]
plt.bar(range(len(interval)),quantity,width=1)
_x = [i-0.5 for i in range(len(width)+1)]
_xtick_labels = interval+[150]
plt.xticks(_x,_xtick_labels)
plt.grid()
plt.savefig("./img.png")
plt.show()