直方图
在 matplotlib 中,可以通过 plt.hist 函数画直方图
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
np.random.seed(100)
hints = np.random.normal(5, 10, 1000)
figure1 = plt.figure(figsize = (10, 5))
figure1.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)
plt.rcParams["font.sans-serif"] = "SimHei"
plt.rcParams["axes.unicode_minus"] = False
plt.hist(hints, bins=10, color=[0,0,1])
plt.show()
运行后如下
这里我们顺便说下
bins 的值代表了要把数据分成几组,也就代表了图上一种会有多少个长方形。bins 越大,体现得就越精确,但相应的分布特征可能就越不明显
比如我们把bin改成50
运行后如下:
可以看到,分组变多后,直方图展示了更多关于原始数据的信息,但是也出现了较多的锯齿,但整体仍然是正态分布的形状
属性2
直方图另外一个非常有用的参数就是 edgecolor,即每个长方形的边框颜色
上面的直方图中间区域是一片蓝,有时候并不利于做进一步的数据分析
这个时候我们可以设置 plt.hist 函数的 edgecolor 属性,来让每个长方形都有一个边框颜色
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
np.random.seed(100)
hints = np.random.normal(5, 10, 1000)
figure1 = plt.figure(figsize = (10, 5))
figure1.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)
plt.rcParams["font.sans-serif"] = "SimHei"
plt.rcParams["axes.unicode_minus"] = False
plt.hist(hints, bins=50, color=[0,0,1], edgecolor = [0,0,0])
plt.show()
运行后如下
展示多个直方图
为了模拟多个直方图,我们首先生成另外两个数据源
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)
figure1 = plt.figure(figsize = (10, 5))
figure1.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)
plt.rcParams["font.sans-serif"] = "SimHei"
plt.rcParams["axes.unicode_minus"] = False
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()
运行如下:
条形图
条形图,又称为柱状图,有的地方也把横版的称为条形图,竖版的称为柱状图,这里我们统称条形图
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)
plt.rcParams["font.sans-serif"] = "SimHei"
plt.rcParams["axes.unicode_minus"] = False
category = ["一班", "二班", "三班", "四班", "五班"]
index_category = np.arange(len(category))
bar_width = 0.25
plt.bar(index_category - bar_width, chinese_scores, width=bar_width, color=[0,0,1])
plt.bar(index_category, math_scores, width=bar_width, color=[0,1,0])
plt.bar(index_category + bar_width, english_scores, width=bar_width, color=[1,0,0])
plt.show()
运行如下
饼图
plt.pie 函数可以绘制饼图
pie 函数由以下几个关键参数实现功能
- x:饼图每一块的占比列表,列表有几个元素就代表饼图分几块
- explode:凸出显示,也是一个列表,和 x 一一对应,代表具体某一块是否要凸出显示
- colors:列表,和 x 一一对应,代表每一块的颜色
- labels:标签文本列表,和 x 一一对应,代表每一块的标题
- autopct:代表百分比文本的格式
- startangle: 默认饼图是从角度为 0 的位置逆时针开始画,这里可以指定初始角度
- labeldistance:文本标签距离饼图的距离
- 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()
运行如下:
Original: https://blog.csdn.net/qq_41780297/article/details/126809309
Author: 木土雨成
Title: 直方图,条形图,饼图
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/768873/
转载文章受原作者版权保护。转载请注明原作者出处!