matplotlib绘制直方图之基本配置——万能模板案例
目录
直方图介绍
绘制直方图的参数(plt.hist())
连接数据库进行直方图绘制案例
使用dataframe里面的plot函数进行绘制(万能模板)
绘制多个子图(多子图直方图案例模板)
概率分布直方图(统计图形)
直方图内显示折线图分布
堆叠面积直方图
在不同的子图中绘制各种类犯罪数据的数值分布
其他案例
乘客年龄分布频数直方图
男女乘客直方图(二维数据)
电影时长分布直方图
每文一语
直方图介绍
直方图(Histogram),又称质量分布图,是一种统计报告图,由一系列高度不等的纵向条纹或线段表示数据分布的情况。 一般用横轴表示数据类型,纵轴表示分布情况。
直方图是数值数据分布的精确图形表示。 这是一个连续变量(定量变量)的概率分布的估计,并且被卡尔·皮尔逊(Karl Pearson)首先引入。它是一种条形图。
为了构建直方图,第一步是将值的范围分段,即将整个值的范围分成一系列间隔,然后计算每个间隔中有多少值。 这些值通常被指定为连续的,不重叠的变量间隔。 间隔必须相邻,并且通常是(但不是必须的)相等的大小。
直方图也可以被归一化以显示“相对”频率。 然后,它显示了属于几个类别中的每个案例的比例,其高度等于1。
绘制直方图的参数(plt.hist())
通常而言,绘制直方图有很多种方法,比如采用matplotlib里面的模块进行绘制,也可以是pandas里面的图形进行绘制,也可以使用Python里面其他的统计绘图模块进行绘制图形,总而言之,想要图形展示的美观,那么就需要自己配置,也就是说模板固然重要,但是如果不懂原理的进行搬运和借用,反而效果不是很好!
连接数据库进行直方图绘制案例
# -*- coding: utf-8 -*-import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
mpl.rcParams['font.sans-serif']=['SimHei'] #显示中文
plt.rcParams['axes.unicode_minus']=False #正常显示负号import pymysql#连接MySQL数据库
v1 = []
v2 = []
db = pymysql.connect(host='127.0.0.1', port=3306, database='mydb',user='root',password='root')
cursor = db.cursor()#读取订单表数据,统计每日利润额
sql_str = "SELECT order_date,ROUND(SUM(profit)/10000,2) FROM orders WHERE FY=2019 GROUP BY order_date"
cursor.execute(sql_str)
result = cursor.fetchall()
for res in result:v1.append(res[0]) # order_datev2.append(res[1]) # sum_profit_by_order_date 每日利润额plt.figure(figsize=(10,5)) #设置图形大小
cs,bs,bars = plt.hist(v2, bins=20, density=False, facecolor="cyan", edgecolor="black", alpha=0.7)
width = bs[1]-bs[0]
for i,c in enumerate(cs):plt.text(bs[i]+width/3,c,round(c))# 返回一个counts数组,一个bins数组和一个图形对象
# 显示横轴标签
plt.xlabel("区间",fontdict={'family':'Fangsong','fontsize':15})
# 显示纵轴标签
plt.ylabel("频数",fontdict={'family':'Fangsong','fontsize':15})
# 显示图标题
plt.title("利润额分布直方图",fontdict={'family':'Fangsong','fontsize':20})
plt.show()
使用dataframe里面的plot函数进行绘制(万能模板)
一般而言,我们导入数据的时候,大概率都是基于表数据进行可视化的,很少使用那些自主独立的数据进行绘制,如果是那种数据,很多人都会去使用origin这个绘图软件了,程序绘图最大的好处就是不需要对数据结果进行输出,输入,这样在很大程度上减少了我们的时间,提高了我们的工作效率。
# 使用DataFrame的plot函数画图
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
mpl.rcParams['font.sans-serif']=['SimHei'] #显示中文
plt.rcParams['font.sans-serif'] = 'KaiTi' # 设置全局字体为中文 楷体
plt.rcParams['axes.unicode_minus']=False #正常显示负号
plt.figure(dpi=130)
datafile = r'../data/orders.csv'
data = pd.read_csv(datafile).query("FY==2019").groupby('ORDER_DATE')[['PROFIT']].sum()
data.plot(kind='hist',bins=20,figsize=(15,5),color='y',alpha=0.5,edgecolor='c',histtype='bar')plt.xlabel("区间",fontdict={'family':'Fangsong','fontsize':15})
plt.ylabel("频数",fontdict={'family':'Fangsong','fontsize':15})
plt.title("利润额分布直方图",fontdict={'family':'Fangsong','fontsize':20},y=1.03)# 设置图形上的各类主题值
plt.suptitle('直方图案例',size=22,y=1.05)
plt.title("绘制日期:2022年 昵称:王小王-123", loc='right',size=12,y=1.03)plt.title("主页:https://blog.csdn.net/weixin_47723732", loc='left',size=12,y=1.03)plt.show()
绘制多个子图(多子图直方图案例模板)
plt.tight_layout() # 自动紧凑布局,避免遮挡
是很重要的一个参数,一般是在结尾出添加这个参数
import pandas as pddatafile = r'../data/orders.csv'
data = pd.read_csv(datafile).query("FY==2019").groupby('ORDER_DATE')[['PROFIT']].sum()fig = plt.figure(figsize=(10,5),dpi=130) # 生成画布# 生成子图1
ax1 = plt.subplot(121) # 1行2列中的第1个
plt.title("CSDN博客专家", loc='left',size=12,y=1.03) #添加备注# 生成子图2
ax2 = plt.subplot(122) # 1行2列中的第2个# 设置图形上的各类主题值
plt.title("王小王-123", loc='right',size=12,y=1.03)#添加备注#df.plot使figure级别的绘图函数,默认会生成新的figure,可以通过ax参数指定绘图的坐标子图
data.plot(kind='hist',bins=20,color='c',alpha=0.5,edgecolor='c',histtype='bar',ax=ax1,figure=fig) # 指定这个图画到ax1中
#plt.xlabel("区间",fontdict={'family':'Fangsong','fontsize':15})
ax1.set_xlabel("区间",fontdict={'family':'Fangsong','fontsize':15})
#plt.ylabel("频数",fontdict={'family':'Fangsong','fontsize':15})
ax1.set_ylabel("频数",fontdict={'family':'Fangsong','fontsize':15})
ax1.set_title("cyan")
#print(ax1.get_xticks())data.plot(kind='hist',bins=20,color='y',alpha=0.5,edgecolor='y',histtype='bar',ax=ax2,figure=fig) # 指定这个图画到ax2中
# plt.xlabel = plt.gca().set_xlabel() plt. 获取“当前”的坐标子图,需要小心执行的位置
plt.xlabel("区间",fontdict={'family':'Fangsong','fontsize':15})
plt.ylabel("频数",fontdict={'family':'Fangsong','fontsize':15})
plt.title("yellow") # subplot的标题plt.suptitle("利润额分布直方图",fontdict={'family':'Fangsong','size':22}) # figure的标题
plt.tight_layout() # 自动紧凑布局,避免遮挡
plt.show()
概率分布直方图(统计图形)
# -*- coding:utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt#概率分布直方图
#高斯分布
#均值为0
mean = 0
#标准差为1,反应数据集中还是分散的值
sigma = 1
x=mean+sigma*np.random.randn(10000)
fig,(ax0,ax1) = plt.subplots(nrows=2,figsize=(9,6))
#第二个参数是柱子宽一些还是窄一些,越大越窄越密
ax0.hist(x,40,density=1,histtype='bar',facecolor='yellowgreen',alpha=0.75) # histtype返回一组bar的数组
##pdf概率分布图,一万个数落在某个区间内的数有多少个
ax0.set_title('pdf')
ax1.hist(x,20,density=1,histtype='stepfilled',facecolor='pink',alpha=0.75,cumulative=True,rwidth=0.8) # 返回的一条step线,cumulative=True数值的累积的
#cdf累计概率函数,cumulative累计。比如需要统计小于5的数的概率
ax1.set_title("cdf")
fig.subplots_adjust(hspace=0.4)
plt.show()
直方图内显示折线图分布
import matplotlib.mlab as mlab
import matplotlib.pyplot as plt
mpl.rcParams['font.sans-serif']=['SimHei'] #显示中文
plt.rcParams['font.sans-serif'] = 'KaiTi' # 设置全局字体为中文 楷体
plt.rcParams['axes.unicode_minus']=False #正常显示负号
plt.figure(figsize=(17,8),dpi=120)import numpy as np
from scipy.stats import norm
np.random.seed(10680801)
mu=100
sigma=15
x=mu+sigma*np.random.randn(500)
num_bins=60
fig,ax=plt.subplots()
#fig,ax=plt.subplots(ncols=2)
#ax1 = ax[0]
#ax2 = ax[1]
n,bins,patches=ax.hist(x,num_bins,density=True)
y=norm.pdf(bins,mu,sigma)
ax.plot(bins,y,'--')
ax.set_xlabel('IQ')
ax.set_ylabel('概率密度')
ax.set_title(r'智商分布情况直方图')
fig.tight_layout()
堆叠面积直方图
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
crime=pd.read_csv(r"http://datasets.flowingdata.com/crimeRatesByState2005.csv")
fig,ax=plt.subplots()ax.hist(crime["robbery"],bins=12,histtype="bar",alpha=0.6,label="robbery",stacked=True)
ax.hist(crime["aggravated_assault"],bins=12,histtype="bar",alpha=0.6,label="aggravated_assault",stacked=True)
ax.legend()
ax.set_xticks(np.arange(0,721,60))
ax.set_xlim(0,720)
ax.set_yticks(np.arange(0,21,4))
plt.show()
在不同的子图中绘制各种类犯罪数据的数值分布
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
crime=pd.read_csv(r"http://datasets.flowingdata.com/crimeRatesByState2005.csv")crime = crime.query("state!='United States'").query("state!='District of Columbia'")plt.figure(figsize=(10,5),dpi=120)
nrows=2
ncols=4
n = np.arange(nrows*ncols)+1
for i in n:ax = plt.subplot(nrows,ncols,i)ax.hist(crime.iloc[:,i])ax.set_title(crime.columns[i])plt.suptitle("各种类犯罪数据的数值分布",y=1.02)
plt.tight_layout()
其他案例
乘客年龄分布频数直方图
# 导入第三方库
import pandas as pd
import matplotlib.pyplot as plt# 设置中文
plt.rcParams['font.sans-serif'] = ['SimHei']# 创建图形
plt.figure(figsize=(20,8),dpi=80)# 准备数据(读取Titanic数据集)
titanic = pd.read_csv(r'E:\PythonData\exercise_data\train.csv')# 检查年龄是否有缺失
any(titanic.Age.isnull())# 删除含有缺失年龄的观察
titanic.dropna(subset=['Age'], inplace=True)# 绘图:乘客年龄的频数直方图
plt.hist(titanic.Age, # 绘图数据bins = 20, # 指定直方图的条形数为20个color = 'steelblue', # 指定填充色edgecolor = 'k', # 设置直方图边界颜色label = '直方图')# 为直方图呈现标签# 刻度设置
plt.xticks(fontsize=15)
plt.yticks(fontsize=15)# 添加描述信息
plt.xlabel('年龄:岁',fontsize=20)
plt.ylabel('人数:个',fontsize=20)
plt.title('乘客年龄分布',fontsize=20)# 显示图形
plt.show()
男女乘客直方图(二维数据)
设置了组距和其他的参数
# 导入库
import matplotlib.pyplot as plt
import numpy as np# 设置字体
plt.rcParams['font.sans-serif'] = ['SimHei']# 创建图形
plt.figure(figsize=(20,8),dpi=80)# 提取不同性别的年龄数据
age_female = titanic.Age[titanic.Sex == 'female']
age_male = titanic.Age[titanic.Sex == 'male']# 设置直方图的组距
bins = np.arange(titanic.Age.min(), titanic.Age.max(), 2)# 男性乘客年龄直方图
plt.hist(age_male, bins = bins, label = '男性',edgecolor = 'k', color = 'steelblue', alpha = 0.7)# 女性乘客年龄直方图
plt.hist(age_female, bins = bins, label = '女性',edgecolor = 'k', alpha = 0.6,color='r')# 调整刻度
plt.xticks(fontsize=15)
plt.yticks(fontsize=15)# 设置坐标轴标签和标题
plt.title('男女乘客年龄直方图',fontsize=20)
plt.xlabel('年龄',fontsize=20)
plt.ylabel('人数',fontsize=20)# 去除图形顶部边界和右边界的刻度
plt.tick_params(top='off', right='off')# 显示图例
plt.legend(loc='best',fontsize=20)# 显示图形
plt.show()
电影时长分布直方图
# 导入库
import matplotlib.pyplot as plt# 设置字体
plt.rcParams['font.sans-serif'] = ['SimHei']# 创建图形
plt.figure(figsize=(20,8),dpi=80)# 准备数据
time=[131,98,125,131,124,139,131,117,128,108,135,138,131,102,107,114,119,128,121,142,127,130,124,101,110,116,117,110,128,128,115,99,136,126,134,95,138,117,111,78,132,124,113,150,110,117,86,95,144,105,126,130,126,130,126,116,123,106,112,138,123,86,101,99,136,123,117,119,105,137,123,128,125,104,109,134,125,127,105,120,107,129,116,108,132,103,136,118,102,120,114,105,115,132,145,119,121,112,139,125,138,109,132,134,156,106,117,127,144,139,139,119,140,83,110,102,123,107,143,115,136,118,139,123,112,118,125,109,119,133,112,114,122,109,106,123,116,131,127,115,118,112,135,115,146,137,116,103,144,83,123,111,110,111, 100,154,136,100,118,119,133,134,106,129,126,110,111,109,141,120,117,106,149,122,122,110,118,127,121,114,125,126,114,140,103,130,141,117,106,114,121,114,133,137,92,121,112,146,97,137,105,98,117,112,81,97,139,113,134,106,144,110,137,137,111,104,117,100,111,101,110,105,129,137,112,120,113,133,112,83,94,146, 133,101,131,116,111, 84,137,115,122,106,144,109,123,116,111,111,133,150]
# 设置组距
bins=2groups = int((max(time)-min(time))/bins)# 绘制直方图
plt.hist(time,groups,color='b',edgecolor = 'k',density = True) # 指定直方从图的边界色)# 调整刻度
plt.xticks(list(range(min(time),max(time)))[::2],fontsize=15)
plt.yticks(fontsize=15)# 添加描述信息
plt.xlabel('电影时长:分钟',fontsize=20)
plt.ylabel('电影数量占比',fontsize=20)# 增加网格
plt.grid(True,linestyle='--',alpha=1)# 添加标题
plt.title('电影时长分布直方图',fontsize=20)plt.show()
每文一语
坚持下去的动力来源于不断地发现新的事物!
matplotlib绘制直方图之基本配置——万能模板案例相关推荐
- matplotlib绘制饼图之基本配置——万能模板案例
目录 饼图的概念 连接数据库绘制饼图案例(pandas画图) 显示百分比 饼图常见参数 扇区分离饼图 添加颜色 添加阴影 显示百分比 控制起始角度 将饼图放置在坐标轴 双饼图显示 饼图万能模板 每文一 ...
- matplotlib绘制散点图之基本配置——万能模板案例
目录 散点图 散点图一行代码显示 加颜色的散点图 颜色深浅表示数值大小 散点图显示颜色和大小 自定义图表散点图 散点图万能模板 其他模板 每文一语 散点图 散点图是指在回归分析中,数据点在直角坐标系平 ...
- matplotlib绘制柱状图之基本配置——万能模板案例
目录 连接数据库案例 柱状图绘制 堆叠柱状图--尾部 堆叠柱状图--头部 双维柱状图模板 每文一语 连接数据库案例 import pymysql # pip install pymysql安装,用来连 ...
- matplotlib绘制雷达图之基本配置——万能模板案例
目录 介绍 应用场景 案例一(成绩雷达图重叠) 案例二(成绩雷达图左右图) 极坐标 每文一语 介绍 雷达图是以从同一点开始的轴上表示的三个或更多个定量变量的二维图表的形式显示多变量数据的图形方法.轴的 ...
- matplotlib绘制直方图,饼图,散点图,气泡图,箱型图,雷达图
matplotlib绘制直方图,饼图,散点图,气泡图,箱型图,雷达图 一.直方图 用10000个正态分布随机数画直方图 二.绘制饼图或者圆环图 圆环图 根据消费支出画圆环图 三.绘制散点图或气泡图 使 ...
- Python matplotlib绘制直方图
Python matplotlib绘制直方图 前面的文章介绍了使用matplotlib绘制折线图.散点图和柱状图,柱状图参考:https://blog.csdn.net/weixin_43790276 ...
- 第三章 使用 matplotlib 绘制直方图
系列文章目录 第一章 使用 matplotlib 绘制折线图 第二章 使用 matplotlib 绘制条形图 第三章 使用 matplotlib 绘制直方图 第四章 使用 matplotlib 绘制散 ...
- 超详细的Python matplotlib 绘制直方图 赶紧收藏
前言 经过前面对 matplotlib 模块从底层架构.基本绘制步骤等学习,我们已经学习了折线图.柱状图的绘制方法. 在分析数据的时候,我们会根据数据的特点来选择对应图表来展示,需要表示质量这一概念, ...
- python绘制直方图plt_Python:matplotlib绘制直方图
使用hist方法来绘制直方图: 绘制直方图,最主要的是一个数据集data和需要划分的区间数量bins,另外你也可以设置一些颜色.类型参数: plt.hist(np.random.randn(1000) ...
最新文章
- Maven常用参数及其说明
- 求一颗二叉树中两个节点的最低公共父节点
- 算法学习:回文自动机
- 第3章 NFS基本应用
- LeetCode 264. 丑数 II
- DELL安装不了mysql_Windows 版本 Mysql 8.x 安装
- 6月28(docker)
- linux添加usb打印机,打印机配置和添加本地打印机
- scratch中实现画笔功能
- opencv摄像头捕获视频
- Windows 95 被做成了一款 app,我们在 MacBook 上体验了它
- NotifyIcon的属性、事件、方法
- Java链表——插入和删除
- 【Rust日报】2022-10-12 国内物联网芯片厂商发布世界上第一款 rust 芯片支持库
- 软件设计分为前端后端吗
- uni-ui简单入门教程 - 如何用HBuilderX为uni-app项目启用uni-ui扩展组件?
- 电子元器件封装获取方法
- 途牛原创|基于EAV模型的运营系统架构实践
- Titanic 预测问题
- ObjectARXWizards AutoCAD .NET Wizards 下载地址
热门文章
- WampServer下载与安装
- Proxmox VE 6.0管理指南——8. Proxmox VE存储
- 2016年高校保送生拟录取名单 (北京大学)
- shopee售后退款与退货规定
- Concurnas语言利用JVM开发高性能应用程序
- python爬取知乎评论_从零开始写Python爬虫 --- 爬虫应用:IT之家热门段子(评论)爬取...
- 水果千禧果/圣女果/小番茄发圈文案,配水果千禧果/圣女果/小番茄的朋友圈文案
- ES2019新增功能
- 关于提取百度文库无法复制的正文内容方法
- python 最准确的图片转文字_使用Tesseract+python进行图片转文字记录