①matplotlib绘制直方图之基本配置——万能模板案例

简介: matplotlib绘制直方图之基本配置——万能模板案例

直方图介绍

直方图(Histogram),又称质量分布图,是一种统计报告图,由一系列高度不等的纵向条纹或线段表示数据分布的情况。 一般用横轴表示数据类型,纵轴表示分布情况。


直方图是数值数据分布的精确图形表示。 这是一个连续变量(定量变量)的概率分布的估计,并且被卡尔·皮尔逊(Karl Pearson)首先引入。它是一种条形图。


为了构建直方图,第一步是将值的范围分段,即将整个值的范围分成一系列间隔,然后计算每个间隔中有多少值。 这些值通常被指定为连续的,不重叠的变量间隔。 间隔必须相邻,并且通常是(但不是必须的)相等的大小。


直方图也可以被归一化以显示“相对”频率。 然后,它显示了属于几个类别中的每个案例的比例,其高度等于1。


绘制直方图的参数(plt.hist())

image.png

通常而言,绘制直方图有很多种方法,比如采用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_date
    v2.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()

image.png


绘制多个子图(多子图直方图案例模板)

plt.tight_layout() # 自动紧凑布局,避免遮挡


是很重要的一个参数,一般是在结尾出添加这个参数


import pandas as pd
datafile = 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()


image.png


概率分布直方图(统计图形)

# -*- 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()


image.png

相关文章
|
10月前
|
Python
Python使用Matplotlib创建不同类型图表的案例
使用Matplotlib创建不同类型图表的案例
73 1
|
2月前
|
Python
Python学习笔记之Matplotlib模块入门(直线图、折线图、曲线图、散点图、柱状图、饼状图、直方图、等高线图和三维图的绘制)-2
Python学习笔记之Matplotlib模块入门(直线图、折线图、曲线图、散点图、柱状图、饼状图、直方图、等高线图和三维图的绘制)
|
2月前
|
数据可视化 开发者 Python
Python学习笔记之Matplotlib模块入门(直线图、折线图、曲线图、散点图、柱状图、饼状图、直方图、等高线图和三维图的绘制)-1
Python学习笔记之Matplotlib模块入门(直线图、折线图、曲线图、散点图、柱状图、饼状图、直方图、等高线图和三维图的绘制)
|
3月前
|
数据可视化 数据挖掘 C++
数据分析综合案例讲解,一文搞懂Numpy,pandas,matplotlib,seaborn技巧方法
数据分析综合案例讲解,一文搞懂Numpy,pandas,matplotlib,seaborn技巧方法
|
3月前
|
Python
使用Matplotlib创建不同类型图表的案例
【4月更文挑战第29天】使用Python的matplotlib库创建了四种基本图形:折线图、散点图、柱状图和饼图。代码分别展示了如何绘制这些图表,包括设置X轴和Y轴标签以及标题。这只是matplotlib的基础,更多图表和高级功能可供进一步学习和探索。
50 1
|
3月前
|
Python
matplotlib-直方图
matplotlib-直方图
|
3月前
|
数据采集 小程序 数据挖掘
Matplotlib库模板学习,2024年最新微信小程序页面跳转方法总结
Matplotlib库模板学习,2024年最新微信小程序页面跳转方法总结
|
3月前
|
数据可视化 搜索推荐 数据处理
Matplotlib在数据科学中的应用与案例分析
【4月更文挑战第17天】本文探讨了Matplotlib在数据科学中的应用,强调其作为Python中最常用的可视化库,提供多种图表类型、高度可定制性、交互式功能及与其他库的集成。通过一个案例分析展示了如何使用Matplotlib绘制城市人口分布的条形图,并添加交互式元素以增强数据探索。掌握Matplotlib能提升数据科学家的可视化能力和效率。
|
3月前
|
Python
又再肝3天,整理了65个Matplotlib案例,这能不收藏?
又再肝3天,整理了65个Matplotlib案例,这能不收藏?
111 0
|
26天前
|
数据可视化 数据挖掘 Python
数据界的颜值担当!Python数据分析遇上Matplotlib、Seaborn,可视化美出新高度!
【7月更文挑战第24天】在数据科学领域,Python的Matplotlib与Seaborn将数据可视化升华为艺术,提升报告魅力。Matplotlib作为基石,灵活性强,新手友好;代码示例展示正弦波图的绘制与美化技巧。Seaborn针对统计图表,提供直观且美观的图形,如小提琴图,增强数据表达力。两者结合,创造视觉盛宴,如分析电商平台销售数据时,Matplotlib描绘趋势,Seaborn揭示类别差异,共塑洞察力强的作品,使数据可视化成为触动人心的艺术。
41 7