欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python中matplotlib库的学习2

程序员文章站 2024-03-26 13:03:11
...

直方图

直方图的特点:上篇文章我完成了对条形图和折线图的整理
link
条形图这类图像是以矩形的长度表示每一组的频数或数量,其宽度(表示类别)则是固定的,利于较小的数据集分析
直方图是以矩形的长度表示每一组的频数或数量,宽度则表示各组的组距,因此其高度和宽度均有意义,利于展示大量数据集的统计·结果
由于分组数据具有连续性,直方图的各矩形通常是连续排列,而条形图则是分开排列
绘制直方图的主要方法是matplotlib.pyplot.hist(x, bins=10, range=None,density=False, weights=None, bottom=None,align=‘mid’,log=False,color=None, label=None, stacked=False hold=None,**kwargs)

x: 一个列表或者多个列表(表示不同数据集,长度可以不一致)
bins表示每个变量的值被分为多少份
density为false则显示频率分布,而不是概率密度
range: 元组
weights: x里每个元素对bin高度的贡献(默认为1)
bottom: 数字或者长度为bins的列表
align: [‘left’ | ‘mid’ | ‘right’]
color: 一种颜色或者颜色列表(针对不同数据集)

import numpy as np
import matplotlib.pyplot as plt
plt.style.use("ggplot")
mu1,mu2,sigma=100,130,10
x1=mu1+sigma*np.random.randn(10000)
x2=mu2+sigma*np.random.randn(10000)
#第五六行代码使用了python的随机数生成器创建了两个正态分布变量x1和x2,其中x1均值被设置为100,x2均值设置为130,正态分布的标准差为10
fig=plt.figure()#建立空图表
ax1=fig.add_subplot(1,1,1)#添加了一个子图
n,bins,patches=ax1.hist(x1,bins=50,density=False,color="darkblue")
n,bins,patches=ax1.hist(x2,bins=50,density=False,color="orange",alpha=0.5)
ax1.xaxis.set_ticks_position("top")#目前使用过的参数有top和bottom
ax1.yaxis.set_ticks_position("right")#目前使用过的参数有left和right
plt.xlabel("Bins")
plt.ylabel("Number of values in bin")
fig.suptitle("Histograms",fontsize=14,fontweight="bold")#设置副标题
ax1.set_title("Two Frequency Distributions")
plt.savefig("histogram.png",dpi=400,bbok_inches="tight")
plt.show()

散点图

散点图可以表示两个数值变量之间的相对关系,这两个变量分别位于两个数轴上,例如身高和体重,或者供给和需求。散点图有利于识别变量之间是否具有正相关(图中的点集中于某个具体参数)或负相关(图中的点较为发散)
通过这篇文章的学习,你甚至可以画一条回归曲线,也就是使方差最小的曲线,利用图中的点基于一个变量的值预测另一个变量的值
(直接梦回高中苦逼的算回归方程的日子????)
下面是一个散点图例子的相关代码

import numpy as np
import matplotlib.pyplot as plt
plt.style.use("ggplot")
x=np.arange(start=1,stop=15,step=1)#通过开始值和终值创建对应公差的一维数组
y_linear=x+5*np.random.randn(14)
y_quadratic=x**2+10*np.random.randn(14)
#5,6行通过随机数使数据与一条直线与二次曲线稍稍偏离
fn_linear=np.poly1d(np.polyfit(x,y_linear,deg=1))
fn_quadratic=np.poly1d(np.polyfit(x,y_quadratic,deg=2))
# 第8、9行则是通过numpy的polyfit函数通过两组数据的点来拟合出一条直线和二次曲线,再使用poly1d根据直线和二次曲线的参数生成一个线性方程和二次方程
fig=plt.figure()
ax1=fig.add_subplot(1,1,1)
ax1.plot(x,y_linear,"bo",x,y_quadratic,"go",x,fn_linear(x),"b-",x,fn_quadratic(x),"g-",linewidth=2)
#这一行代码是为了画出图像bo是指画出蓝色的⚪,b-指画出蓝色的实线,剩余两个参数同理
ax1.xaxis.set_ticks_position("bottom")
ax1.yaxis.set_ticks_position("right")
ax1.set_title("Scatter Plots Regression Lines")
plt.xlabel("x")
plt.ylabel("f(x)")
plt.xlim(min(x)-1,max(x)+1)#规定图像x取值范围
plt.ylim(min(y_quadratic)-10,max(y_quadratic)+10)#规定图像y取值范围
plt.show()

箱线图

箱线图可以表示出数据的最小值、第一四分位数、中位数、第三四分位数和最大值。箱体
的下部和上部边缘线分别表示第一四分位数和第三四分位数,箱体中间的直线表示中位
数。箱体上下两端延伸出去的直线(whisker,亦称为“须”)表示非离群点的最小值和最
大值,在直线(须)之外的点表示离群点。
下面为箱线图代码实现的一个例子

import numpy as np
import matplotlib.pyplot as plt
plt.style.use('ggplot')
N = 500
normal = np.random.normal(loc=0.0, scale=1.0, size=N)
lognormal = np.random.lognormal(mean=0.0, sigma=1.0, size=N)
index_value = np.random.random_integers(low=0, high=N-1, size=N)
normal_sample = normal[index_value]
lognormal_sample = lognormal[index_value]
box_plot_data = [normal,normal_sample,lognormal,lognormal_sample]
fig = plt.figure()
ax1 = fig.add_subplot(1,1,1)
box_labels = ['normal','normal_sample','lognormal','lognormal_sample']
ax1.boxplot(box_plot_data, notch=False, sym='.', vert=True, whis=1.5,showmeans=True, labels=box_labels)
ax1.xaxis.set_ticks_position('bottom')
ax1.yaxis.set_ticks_position('left')
ax1.set_title('Box Plots: Resampling of Two Distributions')
ax1.set_xlabel('Distribution')
ax1.set_ylabel('Value')
plt.savefig('box_plot.png', dpi=400, bbox_inches='tight')
plt.show()

plt.boxplot(x, notch=None, sym=None, vert=None, whis=None, positions=None, widths=None, patch_artist=None, meanline=None, showmeans=None, showcaps=None, showbox=None, showfliers=None, boxprops=None, labels=None, flierprops=None, medianprops=None, meanprops=None, capprops=None, whiskerprops=None)
此为箱线图绘制函数的主要参数x:指定要绘制箱线图的数据;
notch:是否是凹口的形式展现箱线图,默认非凹口;
sym:指定异常点的形状,默认为+号显示;
vert:是否需要将箱线图垂直摆放,默认垂直摆放;
whis:指定上下须与上下四分位的距离,默认为1.5倍的四分位差;
positions:指定箱线图的位置,默认为[0,1,2…];
widths:指定箱线图的宽度,默认为0.5;
patch_artist:是否填充箱体的颜色;
meanline:是否用线的形式表示均值,默认用点来表示;
showmeans:是否显示均值,默认不显示;
showcaps:是否显示箱线图顶端和末端的两条线,默认显示;
showbox:是否显示箱线图的箱体,默认显示;
showfliers:是否显示异常值,默认显示;
boxprops:设置箱体的属性,如边框色,填充色等;
labels:为箱线图添加标签,类似于图例的作用;
filerprops:设置异常值的属性,如异常点的形状、大小、填充色等;
medianprops:设置中位数的属性,如线的类型、粗细等;
meanprops:设置均值的属性,如点的大小、颜色等;
capprops:设置箱线图顶端和末端线条的属性,如颜色、粗细等;
whiskerprops:设置须的属性,如颜色、粗细、线的类型等;
以上就是直方图、散点图和箱线图的绘制大体方法的总结,学习的参考书籍为《python数据分析基础》撰写此文期间csdn上的一些文章也在我学习matplotlib库的过程中起了指导作用。
博主整理与码字不易,留个????再走呗^ 3 ^