python的matplotlib库

目录

一、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()

python的matplotlib库_第1张图片

一、figure

可以理解为绘图之前,布置一张合适的画板,设置图片的大小,分辨率

函数定义如下

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)

二、plot

绘制图的形状

函数定义如下

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)

参数说明:

  • x, y:点或线的节点,x 为 x 轴数据,y 为 y 轴数据,数据可以列表或数组。
  • fmt:可选,定义基本格式(如颜色、标记和线条样式)。
  • **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' 倒三角标记,'^' 上三角标记,'>' 右三角标记,'<' 左三角标记...等等。

三、savefig

将绘制的图保存到本地

plt.savefig("./img.png")   #保存图片

可以保存为svg矢量图格式,放大不会有锯齿

四、show

plt.show()    #显示绘制的图片

五、xticks

设置x轴的刻度

_xtick_label = [i/2 for i in  range(4,49)]
plt.xticks(_xtick_label)

python的matplotlib库_第2张图片

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)

python的matplotlib库_第3张图片

六、xlable和ylable

添加x和y轴的标签

plt.ylabel("温度",fontproperties=my_font)

python的matplotlib库_第4张图片

 七、title

设置该图的标题

plt.title("10点到12点每分钟气温变化情况",fontproperties=my_font)

python的matplotlib库_第5张图片

八、grid

设置图表中的网格线

def grid(visible=None, which='major', axis='both', **kwargs):
  • b:可选,默认为 None,可以设置布尔值,true 为显示网格线,false 为不显示,如果设置 **kwargs 参数,则值为 true。
  • which:可选,可选值有 'major'、'minor' 和 'both',默认为 'major',表示应用更改的网格线。
  • axis:可选,设置显示哪个方向的网格线,可以是取 'both'(默认),'x' 或 'y',分别表示两个方向,x 轴方向或 y 轴方向。
  • **kwargs:可选,设置网格样式,可以是 color='r', linestyle='-' 和 linewidth=2,分别表示网格线的颜色,样式和宽度。
  • color:'b' 蓝色,'m' 洋红色,'g' 绿色,'y' 黄色,'r' 红色,'k' 黑色,'w' 白色,'c' 青绿色,'#008000' RGB 颜色符串。

    linestyle'‐' 实线,'‐‐' 破折线,'‐.' 点划线,':' 虚线。

    linewidth设置线的宽度,可以设置一个数字。

  • alpha:设置透明度

#绘制网格
plt.grid()

python的matplotlib库_第6张图片

 九、plot绘制多条线

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)

python的matplotlib库_第7张图片

 十、legend

添加图例

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
===============   =============

python的matplotlib库_第8张图片

十一、scatter

绘制散点图

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')

python的matplotlib库_第9张图片

 十二、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,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()

python的matplotlib库_第10张图片

绘制多次条形图

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()

python的matplotlib库_第11张图片

 

 十三、barh

绘制横向条形图

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)

python的matplotlib库_第12张图片

十四、绘制直方图

组距:指每个小组的两个端点间的距离

组数 \doteq 极差/组距 = (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()

python的matplotlib库_第13张图片

频数图

 当d不能被整除时,会有一些偏移

绘制频率图

设置参数 normed=True

plt.hist(a,num_bins,normed=True)

python的matplotlib库_第14张图片

 频率图

用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()

python的matplotlib库_第15张图片

 

你可能感兴趣的:(python)