matplotlib 绘图教程,含各种图形

matplotlib 绘图

一:折线图绘制

安装模块

pip3 install matplotlib
  1. 创建画布
plt.figure()
  1. 指定x,y的值
x = np.arange(1, 11, 1)
y = 2 * x + 1
  1. 绘制图形:折线图

    color:线的颜色

    marker:点的样式

    linestyle:线的样式

    markerfacecolor:点的内部颜色

    markersize:点的大小

    markeredgecolor:点的边缘颜色

    alpha:透明度

plt.plot(x,y,color="y",marker="D",linestyle="--")
plt.scatter(x,y)
  1. 显示图形
plt.show()

效果如下:

在这里插入图片描述

二:柱状图

只有高度有实际意义,横坐标表示柱子所在的位置,柱子的宽度没有实际的意义

要求:实现如下柱装图显示

在这里插入图片描述

分析:

针对上面的柱状图进行分析,可以发现它是由两组柱状图组成的,即红色的为一组,浅蓝色的为一组,且中间有一段间隔。一共有4个柱子,加上中间的一个间隔,可以视为有5个柱子。我们可以将水平方向分为5份,红色柱子处于1和4的位置,浅蓝色的柱子处于2和5的位置,即x1=[1,4],x2=[2,5],y的值极为相应x对应的值,即y1=[1000,300],y2=[800,100]

代码实现

修改字体

plt.rcParams["font.sans-serif"] = "Noto Sans CJK JP"

创建画布

plt.figure(facecolor="gray")

设置x,y的值

x1 = [1,4]
x2 = [2,5]
y1 = [1000,300]
y2 = [800,100]

绘制图形:柱状图

width:柱子宽度,默认为0.8

color:柱子颜色,color可以为一个列表,表示用列表中的颜色为柱子循环赋值

linewidth:为柱子设置一个边框

edgecolor:边框颜色

注意此处边框颜色和边框的线宽需要一一对应,即有几个柱子,添加几个颜色,几个线宽,这两个参数需要同步

plt.bar(x1,y1,color="red")
plt.bar(x2,y2,color="skyblue")

设置x轴显示的名称

x轴仅代表位置,我们只需要将"男","女"放在1.5和4.5的位置即可

plt.xticks([1.5,4.5],["男","女"])

标注文本

标注文本是在对应的(x,y)的那个点上进行标注,所以我们只需要找到标注点的坐标就找到了标注位置

va:垂直方向位置
ha:水平方向位置
bbox:文本框,可以设置文本框的颜色与透明度

# 合并x1,x2 和  y1 y2
x1.extend(x2)
y1.extend(y2)
# 第一个参数x代表横坐标
# 第二个参数y代表纵坐标
# 第三个参数y代表标注的值
for x,y in zip(x1,y1):
	plt.text(x,y+2,y,fontdict=font,ha="center",va="center",bbox={"facecolor":"red","alpha":0.5,"edgecolor":"yellow"})

显示图形

plt.show()

效果如下:

在这里插入图片描述

代码如下:

import matplotlib.pyplot as plt
import numpy as np

# 修改字体
plt.rcParams["font.sans-serif"] = "Noto Sans CJK JP"

# 创建画布
plt.figure(facecolor="gray")

# 设置x,y的值
x1 = [1,4]
x2 = [2,5]

y1 = [1000,300]
y2 = [800,100]

# 绘制柱状图
plt.bar(x1,y1,color="red")
plt.bar(x2,y2,color="skyblue")

# 添加图例
plt.legend(["2019年","2020年"],facecolor="pink")

# 设置x轴显示的名称
plt.xticks([1.5, 4.5],["男","女"])

# 合并x1,y1,x2,y2
x1.extend(x2)
y1.extend(y2
        )
# 标注文本
for x,y in zip(x1,y1):
	plt.text(x,y+2,y,ha="center",va="center",bbox={"facecolor":"red","alpha":0.5,"edgecolor":"yellow"})


plt.show()

三:直方图

统计频数

创建画布

plt.figure(facecolor="gray")

设置x的值

x = np.random.randn(10000)

绘制直方图

bins:刻度数

x:要传入的样本

bins:区间的数目,可通过列表自行指定区间

color:直方图颜色

log:计数方法,默认为False,改为True时,使用科学计数法

plt.hist(x,bins=5,color="white")
plt.show()

效果如下:

在这里插入图片描述

plt.figure(facecolor="gray")
x = np.random.rand(10000)
# 指定bins
bins = [-0.01, 0.2, 0.4, 0.6, 0.8, 1.01]
plt.hist(x, bins=bins, log=True, color="blue")
plt.show()

效果如下:

在这里插入图片描述

四:饼图

创建画布,饼图最好是创建一个方的画布

plt.figure(figsize=(6,6))

绘制饼图

label:为饼图的各部分设置标签

autopct:显示饼图每个部分的百分比

explode:设置饼图各部分离圆心的距离

shadow:设置阴影

center:为饼图设置一个圆心,多用来画多个饼图时固定饼图的位置,防止多个饼图重合

x = [1000,2000,3000]
labels = ["A","B","C"]
plt.pie(x,explode=[0.01, 0.02, 0],labels=labels,autopct="%1.1f%%",shadow=True,center=(0,1))

效果展示:

在这里插入图片描述

plt.pie(x,explode=[0.01, 0.02, 0],labels=labels,autopct="%1.1f%%",shadow=True,center=(0.5,1.5))

效果如下:

在这里插入图片描述

import matplotlib.pyplot as plt
import numpy as np

plt.figure(figsize=(6,6))

x = [1000,2000,3000]
labels = ["A","B","C"]

plt.pie(x,explode=[0.1,0.02,0],labels=labels,autopct="%1.1f%%",shadow=True,center=(0,1))

plt.pie(x,explode=[0.01, 0.02, 0],labels=labels,autopct="%1.1f%%",shadow=True,center=(0.5,1.5))

plt.show()

五:雷达图

等分角度,创建x值

x = np.linspace(0, 2*np.pi, 3, endpoint=False)

设置y值

y = [2,1,3]

绘制雷达图

plt.figure(figsize=(6,6))
plt.polar(x,y)
plt.show()

效果展示

在这里插入图片描述

我们发现上图并没有闭合,而且角度不是我们定义的x的角度,我们需要一些参数来让上图闭合且将角度替换成x中的角度

x_concat:将第一个值放到尾部的位置

修改y的值

y = [2,1,3,2]

闭合x轴角度,将第一个值放到末尾位置

x_concat:将第一个值放到尾部的位置

x_concat = np.concatenate(x,[x[0]])
plt.figure(figsize=(6,6))
plt.polar(x_concat,y)

设置角度为x中的角度

plt.xticks(x)
plt.show()

效果如下:

在这里插入图片描述

接下来对样式做一些修改

填充颜色

前两个参数j为将点连接起来确定填充范围,第三个参数为填充颜色,alpha为透明度

plt.fill(x_concat,y,"y",alpha=0.2)

修改坐标点样式

此处的参数可参照折线图的样式来修改

plt.polar(x_concat,y,marker="s",linestyle="--")

效果如下:

在这里插入图片描述

完整代码:

import matplotlib.pyplot as plt
import numpy as np

# 等分角度,创建x值
x = np.linspace(0, 2*np.pi, 3, endpoint=False)

# 设置y轴
y = [2,1,3,2]

# 闭合x轴角度,将第一个值放到末尾位置
x_concat = np.concatenate((x,[x[0]]))

# 绘制雷达图
plt.figure(figsize=(6,6))
plt.xticks(x)
plt.fill(x_concat,y,"y",alpha=0.2)
plt.polar(x_concat,y,marker="s",linestyle="--")

plt.show()

-1609168268320)]

完整代码:

import matplotlib.pyplot as plt
import numpy as np

# 等分角度,创建x值
x = np.linspace(0, 2*np.pi, 3, endpoint=False)

# 设置y轴
y = [2,1,3,2]

# 闭合x轴角度,将第一个值放到末尾位置
x_concat = np.concatenate((x,[x[0]]))

# 绘制雷达图
plt.figure(figsize=(6,6))
plt.xticks(x)
plt.fill(x_concat,y,"y",alpha=0.2)
plt.polar(x_concat,y,marker="s",linestyle="--")

plt.show()
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值