直方图,条形图,饼图

6 篇文章 0 订阅
4 篇文章 0 订阅
本文介绍了如何使用matplotlib在Python中绘制正态分布的直方图,包括调整bins数量、设置边框颜色,以及演示了如何绘制多组直方图、条形图和饼图。通过实例展示了如何利用这些图形展示数据分布和对比不同数据集特性。
摘要由CSDN通过智能技术生成

直方图

在 matplotlib 中,可以通过 plt.hist 函数画直方图

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

#初始化 NumPy 的随机数,并生成以 5 为中心,宽度为正负 10 的 1000 个符合正态分布的随机数,作为我们画图的数据源
np.random.seed(100)
hints = np.random.normal(5, 10, 1000)
#print(hints.mean(), hints.std())

# 创建画布
figure1 = plt.figure(figsize = (10, 5))
figure1.add_subplot(1,1,1)

# 设置轴的属性,轴属性相关的函数都支持fontsize 参数来设置字号
# 这里我们都设置为 14

plt.xlabel("值", fontsize = 14)
plt.ylabel("频率", fontsize = 14)
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.title("正态分布的直方图", fontsize=14)

# 设置画布基本属性:1.显示中文  2.显示负号
plt.rcParams["font.sans-serif"] = "SimHei"
plt.rcParams["axes.unicode_minus"] = False

# 画直方图,分10组,用蓝色来画
plt.hist(hints, bins=10, color=[0,0,1])
plt.show()

运行后如下
在这里插入图片描述
这里我们顺便说下
bins 的值代表了要把数据分成几组,也就代表了图上一种会有多少个长方形。bins 越大,体现得就越精确,但相应的分布特征可能就越不明显
比如我们把bin改成50

在这里插入图片描述
运行后如下:
在这里插入图片描述
可以看到,分组变多后,直方图展示了更多关于原始数据的信息,但是也出现了较多的锯齿,但整体仍然是正态分布的形状

属性2

直方图另外一个非常有用的参数就是 edgecolor,即每个长方形的边框颜色
上面的直方图中间区域是一片蓝,有时候并不利于做进一步的数据分析
这个时候我们可以设置 plt.hist 函数的 edgecolor 属性,来让每个长方形都有一个边框颜色

#coding: utf-8
#date = 2022/9/11

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

#初始化 NumPy 的随机数,并生成以 5 为中心,宽度为正负 10 的 1000 个符合正态分布的随机数,作为我们画图的数据源
np.random.seed(100)
hints = np.random.normal(5, 10, 1000)
#print(hints.mean(), hints.std())

# 创建画布
figure1 = plt.figure(figsize = (10, 5))
figure1.add_subplot(1,1,1)

# 设置轴的属性,轴属性相关的函数都支持fontsize 参数来设置字号
# 这里我们都设置为 14

plt.xlabel("值", fontsize = 14)
plt.ylabel("频率", fontsize = 14)
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.title("正态分布的直方图", fontsize=14)

# 设置画布基本属性:1.显示中文  2.显示负号
plt.rcParams["font.sans-serif"] = "SimHei"
plt.rcParams["axes.unicode_minus"] = False

# 画直方图,分50组,设置长方形的边框颜色是黑色
plt.hist(hints, bins=50, color=[0,0,1], edgecolor = [0,0,0])
plt.show()

在这里插入图片描述
运行后如下

在这里插入图片描述

展示多个直方图

为了模拟多个直方图,我们首先生成另外两个数据源

#coding: utf-8
#date = 2022/9/11

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

hints = np.random.normal(5, 10, 1000)
hints_1 = np.random.normal(0, 8, 500)
hints_2 = np.random.normal(15, 10, 800)

#接下来我们三次调用 plt.hist 即可,为了区分,我们使用三种不同的颜色来画
# 创建画布
figure1 = plt.figure(figsize = (10, 5))
figure1.add_subplot(1,1,1)

# 设置轴的属性,轴属性相关的函数都支持fontsize 参数来设置字号
# 这里我们都设置为 14

plt.xlabel("值",fontsize = 14)
plt.ylabel("频率", fontsize = 14)
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.title("正态分布的直方图", fontsize=14)

# 设置画布基本属性:1.显示中文  2.显示负号
plt.rcParams["font.sans-serif"] = "SimHei"
plt.rcParams["axes.unicode_minus"] = False

# 第一个用蓝色,使用 plt.hist 函数的 alpha 属性,来让三个图都有一定的透明度
plt.hist(hints, bins=50, color=[0,0,1], edgecolor=[0,0,0], alpha = 0.5)

# 第二个用绿色
plt.hist(hints_1, bins=50, color=[0,1,0], edgecolor=[0,0,0], alpha = 0.5)

# 第三个用红色
plt.hist(hints_2, bins=50, color=[1,0,0], edgecolor=[0,0,0], alpha = 0.5)

plt.show()

运行如下:

在这里插入图片描述

条形图

条形图,又称为柱状图,有的地方也把横版的称为条形图,竖版的称为柱状图,这里我们统称条形图

#coding: utf-8
#date = 2022/9/11

import matplotlib.pyplot as plt
import numpy as np


math_scores = np.array([71,65,70,96,64])
chinese_scores = np.array([84,75,68,83,57])
english_scores = np.array([55,78,76,91,64])

# 创建画布
figure2 = plt.figure(figsize = (10, 5))
figure2.add_subplot(1,1,1)

# 设置轴的属性
plt.xlabel("", fontsize = 14)
plt.ylabel("平均分", fontsize = 14)
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)

plt.title("期中成绩条形图", fontsize=14)

# 设置画布基本属性:1.显示中文  2.显示负号
plt.rcParams["font.sans-serif"] = "SimHei"
plt.rcParams["axes.unicode_minus"] = False
category = ["一班", "二班", "三班", "四班", "五班"]

# 使用 index 数组来代替类别
index_category = np.arange(len(category))
# 指定每条条形的宽度
bar_width = 0.25
# 指定宽度为 bar_width, 并且绘制在 index - bar_width 的区域,也就是每组图的左边
plt.bar(index_category - bar_width, chinese_scores, width=bar_width, color=[0,0,1])
# 指定宽度为 bar_width, 并且绘制在 index 的区域,也就是每组图的中间
plt.bar(index_category, math_scores, width=bar_width, color=[0,1,0])
# 指定宽度为 bar_width, 并且绘制在 index + bar_width 的区域,也就是每组图的右边
plt.bar(index_category + bar_width, english_scores, width=bar_width, color=[1,0,0])

plt.show()

运行如下
在这里插入图片描述

饼图

plt.pie 函数可以绘制饼图
pie 函数由以下几个关键参数实现功能

  1. x:饼图每一块的占比列表,列表有几个元素就代表饼图分几块
  2. explode:凸出显示,也是一个列表,和 x 一一对应,代表具体某一块是否要凸出显示
  3. colors:列表,和 x 一一对应,代表每一块的颜色
  4. labels:标签文本列表,和 x 一一对应,代表每一块的标题
  5. autopct:代表百分比文本的格式
  6. startangle: 默认饼图是从角度为 0 的位置逆时针开始画,这里可以指定初始角度
  7. labeldistance:文本标签距离饼图的距离
  8. pctdistance:百分比标签距离饼图中心的距离
    假设我们对一个年级的学生,统计历史上得过三好学生称号的情况,完全没得过的占比为 40%, 得过一次的占比为 30%, 二次的为 25%, 三次以上的为 5%。现在我们用饼图表示这个数据,并将得过三次以上的凸出显示
import matplotlib.pyplot as plt

# 创建画布
figure5 = plt.figure(figsize = (10, 5))
figure5.add_subplot(1,1,1)

plt.rcParams["font.sans-serif"] = "SimHei"

plt.rcParams["axes.unicode_minus"] = False

# 设置饼图数据源
category = ["没有得过", "得过一次", "得过二次", "得过三次以上"]
size = [40, 30, 25, 5]

# 用四种不同的颜色绘制不同的部分
color = ["r", "g", "b", "c"]

explode = [0,0,0,0.1]

# 绘制饼图
plt.pie(size,explode=explode,colors=color,labels=category,labeldistance= 1.1, autopct="%1.1f%%", startangle=90,pctdistance=0.6)
plt.show()

运行如下:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木土雨成小小测试员

你的鼓励将是我最大的创作动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值