python画直方图matplotlib,matplotlib自定义图例
主要介绍matplotlib直方图绘制(通用模板案例)的基本配置,通过示例代码进行了非常详细的介绍,对大家的学习或工作有一定的参考价值。有需要的朋友下面跟边肖学习。
00-1010直方图介绍直方图绘制的参数(plt.hist())。连接数据库以绘制直方图。使用dataframe(通用模板)中的plot函数绘制案例。绘制多个子图(多子图直方图案例模板)。概率分布直方图(统计图)显示了分布的折线图。堆积面积直方图显示了不同子图中各类犯罪数据的数字分布。其他情况。乘客年龄分布频率直方图。男性和女性乘客直方图(二维数据)
目录
直方图又称质量分布图,是一种统计报表图表,由一系列不同高度的垂直条纹或线段表示。通常,横轴表示数据类型,纵轴表示分布。
直方图是数字数据分布的精确图形表示。这是对连续变量(定量变量)的概率分布的估计,由卡尔卡尔皮尔逊首先提出。这是一个条形图。
为了构造直方图,第一步是分割取值范围,即把整个取值范围分成一系列区间,然后计算每个区间有多少个值。这些值通常被指定为连续的、不重叠的可变区间。间隔必须是相邻的,并且通常(但不一定)大小相等。
直方图也可以归一化以显示“相对”频率。然后,显示每个案例属于几个类别的比例,其高度等于1。
直方图介绍
一般来说,绘制直方图的方法有很多种,比如用matplotlib中的模块绘制,用pandas中的图形绘制,或者用Python中的其他统计绘制模块绘制。总之,如果你想要一个漂亮的图形显示,你需要自己配置。也就是说,模板很重要,但是如果你不懂原理,就不会很好的发挥作用!
绘制直方图的参数(plt.hist())
# -*-编码: utf-8 -*-
将numpy作为np导入
将matplotlib作为mpl导入
将matplotlib.pyplot作为plt导入
从matplotlib.font_manager导入字体属性
mpl . RC params[ font . sans-serif ]=[ sim hei ]#显示中文
PLT . RC params[ axes . unicode _ MINUS ]=false #负号正常显示
导入pymysql
#连接到MySQL数据库
v1=[]
v2=[]
db=pymysql.connect(主机=127.0.0.1 ,端口=3306,数据库=mydb ,用户=root ,密码=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()
对于结果:中的结果
v1.append(res[0]) # order_date
V2。append(RES[1])# sum _ profit _ by _ order _ date日利润额
Plt.figure (figure size=(10,5)) #设置图形的大小
cs,bs,bars=plt.hist(v2,bins=20,density=False,facecolor=青色,edgecolor=黑色,alpha=0.7)
宽度=bs[1]-bs[0]
对于I,c在枚举(cs):
plt.text(bs[i] width/3,c,round(c))
#返回一个计数数组、一个箱数组和一个图形对
象
# 显示横轴标签
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 mlabimport 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 npimport 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 npimport 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(rE:\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=2
groups = 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 直方图 内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。