一网打尽Matplotlib Pyplot画图(pycharm版)

pyplot是Matplotlib的子库,提供了和Matlib类似的接口,能很方便用户绘制2D图表。

Pyplot 包含一系列绘图的相关函数,每个函数根据数据绘画出对应图像,也可以对当前的图像进行一些修改,例如:给图像加上标记,生新的图像,在图像中产生新的绘图区域等等。

首先使用import 导入pyplot库,并给出一个方便引用的别名plt.

import matplotlib.pyplot as plt

常用的绘图函数包括:

  • plot():用于绘制线图和散点图
  • scatter():用于绘制散点图
  • bar():用于绘制垂直条形图和水平条形图
  • hist():用于绘制直方图
  • pie():用于绘制饼图

除了这些基本的函数,pyplot 还提供了很多其他的函数,例如用于设置图表属性的函数、用于添加文本和注释的函数、用于保存图表到文件的函数等等。

在画图过程中报错,如AttributeError: module 'backend_interagg' has no attribute 'FigureCanvas'

导入

import matplotlib
matplotlib.use('TkAgg')  # 必须在导入 matplotlib.pyplot 之前设置
import matplotlib.pyplot as plt

画图可能出现中文乱码

plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
plt.rcParams.update({'font.size': 20})

1.直线,折线,曲线,散点图

import matplotlib.pyplot as plt
import numpy as np

xpoints = np.array([0, 7])
ypoints = np.array([0, 60])

plt.plot(xpoints, ypoints)
plt.show()

如果只想绘制两个坐标点,可以使用 o 参数,表示一个实心圈的标记。

即用plt.plot(xpoints, ypoints, 'o')替换plt.plot(xpoints, ypoints)

如果绘制一条不规则线,坐标为 (1, 6) 、 (2, 3) 、(4, 7) 、(5, 0),对应的两个数组为:[1, 2, 3, 4] 与 [6, 3, 7, 0]。

x = np.array([1, 2, 3, 4])
y = np.array( [6, 3, 7, 0])
plt.plot(x, y,linestyle='--',marker='o')#‘--’表示虚线   绘图标记 marker='o'
plt.show()
标记符号描述
"."

m00

","

m01

像素点
"o"

m02

实心圆
"v"

m03

下三角
"^"

m04

上三角
"<"

m05

左三角
">"

m06

右三角
"1"

m07

下三叉
"2"

m08

上三叉
"3"

m09

左三叉
"4"

m10

右三叉
"8"

m11

八角形
"s"

m12

正方形
"p"

m13

五边形
"P"

m23

加号(填充)
"*"

m14

星号
"h"

m15

六边形 1
"H"

m16

六边形 2
"+"

m17

加号
"x"

m18

乘号 x
"X"

m24

乘号 x (填充)
"D"

m19

菱形
"d"

m20

瘦菱形
"|"

m21

竖线
"_"

m22

横线
0 (TICKLEFT)

m25

左横线
1 (TICKRIGHT)

m26

右横线
2 (TICKUP)

m27

上竖线
3 (TICKDOWN)

m28

下竖线
4 (CARETLEFT)

m29

左箭头
5 (CARETRIGHT)

m30

右箭头
6 (CARETUP)

m31

上箭头
7 (CARETDOWN)

m32

下箭头
8 (CARETLEFTBASE)

m33

左箭头 (中间点为基准)
9 (CARETRIGHTBASE)

m34

右箭头 (中间点为基准)
10 (CARETUPBASE)

m35

上箭头 (中间点为基准)
11 (CARETDOWNBASE)

m36

下箭头 (中间点为基准)
"None", " " or ""没有任何标记
'$...$'

m37

渲染指定的字符。例如 "$f$" 以字母 f 为标记。

绘制一个正弦和余弦图,在 plt.plot() 参数中包含两对 x,y 值,第一对是 x,y,这对应于正弦函数,第二对是 x,z,这对应于余弦函数。

x1 = np.linspace(0, 15, 100)
y1 = np.sin(x1)
y2 = np.cos(x1)

plt.plot(x1, y1, color="blue", linewidth=2,linestyle='--')
plt.plot(x1, y2, color="red", linewidth=2,linestyle='-.')

linestyle的类型:   '-', '--', '-.', ':', 'None', ' ', '', 'solid', 'dashed', 'dashdot', 'dotted'

网格线

x = np.array([1, 2, 3, 4])
y = np.array( [6, 3, 7, 0])
plt.title("X-Y")#标题
plt.xlabel('x轴')
plt.ylabel('y轴')
plt.plot(x, y,linestyle='--',marker='o',color='green')#‘--’表示虚线
plt.grid(color = 'r', linestyle = '-.', linewidth = 0.5)
plt.show()

Matplotlib 绘制多图
subplot(nrows, ncols, index, **kwargs) 图的个数=nrows* ncols 当前为index图。

import matplotlib
matplotlib.use('TkAgg')  # 必须在导入 matplotlib.pyplot 之前设置
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
plt.rcParams.update({'font.size': 10})


#plot 1:
x = np.array([1, 2, 3, 4])
y = np.array( [6, 3, 7, 0])

plt.subplot(1, 2, 1)
plt.title("X-Y")
plt.xlabel('x轴')
plt.ylabel('y轴')
plt.plot(x, y,linestyle='--',marker='o',color='green')#‘--’表示虚线
plt.grid(color = 'r', linestyle = '-.', linewidth = 0.5)
plt.title("plot 1")

#plot 2:
x1 = np.linspace(0, 15, 100)
y1 = np.sin(x1)
y2 = np.cos(x1)

plt.subplot(1, 2, 2)
plt.xlabel('x轴')
plt.ylabel('y轴')
plt.plot(x1, y1, color="blue", linewidth=2,linestyle='--')
plt.plot(x1, y2, color="red", linewidth=2,linestyle='dashdot')
plt.title("plot 2")

plt.suptitle("RUNOOB subplot Test")
plt.show()

散点图

plt.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为散点的大小,

c颜色,

marker同上讲解,

norm数据颜色亮度(0,1)

, vmin=None, vmax=None数据亮度设置,norm存在时,忽略

alpha::透明度设置,0-1 之间,默认 None,即不透明。

linewidths:标记点的长度。

edgecolors::颜色或颜色序列,默认为 'face',可选值有 'face', 'none', None。

plotnonfinite::布尔值,设置是否使用非限定的 c ( inf, -inf 或 nan) 绘制点。

import matplotlib
matplotlib.use('TkAgg')  # 必须在导入 matplotlib.pyplot 之前设置
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
plt.rcParams.update({'font.size': 10})

x = np.array([1, 2, 3, 4,  5, 6,  7,  8, 9, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1])
y = np.array([1, 4, 9, 16, 7, 11, 23, 18,12,23,14,15,1, 23, 21,11,6, 13,3])
sizes = np.array([20,50,100,200,500,1000,60,90,20,50,100,200,500,1000,60,90,100,200,500])
colors = np.array(["red","green","black","orange","purple","beige","cyan","magenta","red","green","black","orange"
                      ,"purple","beige","cyan","magenta","purple","beige","cyan"])
plt.title("RUNOOB Scatter Test")
plt.scatter(x, y,s=sizes,c=colors,alpha=0.4)
plt.show()
除了手动设置颜色,还可以通过颜色带设置,设置颜色条需要使用 cmap 参数,默认值为 'viridis',之后颜色值设置为 0 到 100 的数组。

import matplotlib
matplotlib.use('TkAgg')  # 必须在导入 matplotlib.pyplot 之前设置
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
plt.rcParams.update({'font.size': 10})
import matplotlib.pyplot as plt
import numpy as np

x = np.array([1, 2, 3, 4,  5, 6,  7,  8, 9, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1])
y = np.array([1, 4, 9, 16, 7, 11, 23, 18,12,23,14,15,1, 23, 21,11,6, 13,3])
sizes = np.array([20,50,100,200,500,1000,60,90,20,50,100,200,500,1000,60,90,100,200,500])
colors = np.array([0,5,10,15,20,25,30,35,40,45,50,55,60,60,70,75,80,90,100])

plt.scatter(x, y, c=colors, cmap='afmhot_r',s=sizes,alpha=0.6)
plt.colorbar()#显示颜色条
plt.show()

其他的颜色带自查,举个栗子:

BluesBlues_r
GreensGreens_r
RedsReds_r

2.柱状图

plt.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::其他参数。

import matplotlib
matplotlib.use('TkAgg')  # 必须在导入 matplotlib.pyplot 之前设置
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
plt.rcParams.update({'font.size': 10})

import matplotlib.pyplot as plt
import numpy as np

x = np.array(["bar-1", "bar-2", "bar-3", "bar-4"])
y = np.array([12, 22, 6, 18])

plt.bar(x, y,  width=0.5,color = ["#4C5050","red","pink","#688B2F"],align='edge')
plt.show()

只要将plt.bar()改成plt.barh(),width改成height即可。

3.饼图

plt.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。用于指定扇形的属性,比如边框线颜色、边框线宽度等。例如:wedgeprops={'linewidth':5} 设置 wedge 线宽为5。
  • textprops :字典类型,用于指定文本标签的属性,比如字体大小、字体颜色等,默认值为 None。
  • center :浮点类型的列表,用于指定饼图的中心位置,默认值:(0,0)。
  • frame :布尔类型,用于指定是否绘制饼图的边框,默认值:False。如果是 True,绘制带有表的轴框架。
  • rotatelabels :布尔类型,用于指定是否旋转文本标签,默认为 False。如果为 True,旋转每个 label 到指定的角度。
  • data:用于指定数据。如果设置了 data 参数,则可以直接使用数据框中的列作为 x、labels 等参数的值,无需再次传递。

  • import matplotlib
    matplotlib.use('TkAgg')  # 必须在导入 matplotlib.pyplot 之前设置
    import matplotlib.pyplot as plt
    plt.rcParams['font.sans-serif']=['SimHei']
    plt.rcParams['axes.unicode_minus']=False
    plt.rcParams.update({'font.size': 10})
    
    y = np.array([35, 25, 25, 15])
    
    plt.pie(y,
            labels=['A','B','C','D'], # 设置饼图标签
            colors=["#d5695d", "#5d8ca8", "#65a479", "#a564c9"], # 设置饼图颜色
            explode=(0, 0.2, 0, 0), # 第二部分突出显示,值越大,距离中心越远
            autopct='%.2f%%', # 格式化输出百分比
            shadow=True, #阴影
            startangle=90
           )
    plt.title("Pie Test")
    plt.show()

4.直方图

plt.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, **kwargs)

  • x:绘制直方图的数据,一个一维数组或列表。
  • bins:可选参数,表示直方图的箱数。默认为10。
  • range:表示直方图的值域范围,可以是一个二元组或列表。默认为None,即使用数据中的最小值和最大值。
  • density:表示是否将直方图归一化。默认为False,即直方图的高度为每个箱子内的样本数,而不是频率或概率密度。
  • weights:表示每个数据点的权重。默认为None。
  • cumulative:表示是否绘制累积分布图。默认为False。
  • bottom:表示直方图的起始高度。默认为None。
  • histtype:表示直方图的类型,可以是'bar'、'barstacked'、'step'、'stepfilled'等。默认为'bar'。
  • align:表示直方图箱子的对齐方式,可以是'left'、'mid'、'right'。默认为'mid'。
  • orientation:表示直方图的方向,可以是'vertical'、'horizontal'。默认为'vertical'。
  • rwidth:表示每个箱子的宽度。默认为None。
  • log:表示是否在y轴上使用对数刻度。默认为False。
  • color:表示直方图的颜色。
  • label:表示直方图的标签。
  • stacked:表示是否堆叠不同的直方图。默认为False。
  • **kwargs:可选参数,表示其他绘图参数                                                                                  
  • import matplotlib
    matplotlib.use('TkAgg')  # 必须在导入 matplotlib.pyplot 之前设置
    import matplotlib.pyplot as plt
    plt.rcParams['font.sans-serif']=['SimHei']
    plt.rcParams['axes.unicode_minus']=False
    plt.rcParams.update({'font.size': 10})
    import matplotlib.pyplot as plt
    import numpy as np
    
    # 生成一组随机数据
    data = np.random.randn(100)
    # 绘制直方图
    plt.hist(data, bins=10, width=0.5,color='blue', alpha=0.8)
    # 设置图表属性
    plt.title('hist() Test')
    plt.xlabel('Value')
    plt.ylabel('Frequency')
    # 显示图表
    plt.show()
  • 14
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值