数据分析中各种图
Posted 墨词和她的爬虫
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据分析中各种图相关的知识,希望对你有一定的参考价值。
目录
1-----可视化柱状图
2----- 可视化直方图
3----- 可视化折线图
4----- 可视化箱线图
5----- 可视化饼图
6----- 可视化散点图
可视化柱状图
什么是柱状图:
应用于比较分类变量的数值,例如可以用于展示衣服裤子鞋子等商品的销售量。
参数介绍:
bar(left, height, width=0.8, bottom=None, **kwargs)
left为和分类数量一致的数值序列,序列里的数值数量决定了柱子的个数,数值大小决定了距离0点的位置
height为分类变量的数值大小,决定了柱子的高度
width决定了柱子的宽度,仅代表形状宽度而已
bottom决定了柱子距离x轴的高度,默认为None,即表示与x轴距离为0
事实上,left,height,width,bottom这四个参数确定了柱体的位置和大小。默认情况下,left为柱体的居中位置(可以通过align参数来改变left值的含义)
设置柱体颜色:
通过 facecolor(或fc) 关键字参数可以设置柱体颜色
通过 color 关键字参数 可以一次性设置多个颜色
设置柱体描边:
相关的关键字参数为:
edgecolor 或 ec 描边颜色
linestyle 或 ls 描边样式
linewidth 或 lw 描边宽度
设置柱体描边填充:
hatch 关键字可用来设置填充样式,可取值为: / , \ , | , - , + , x , o , O , . , * 。
条形图(横着的柱状图):
使用 barh 方法绘制条形图
plt.barh 方法的签名为:
barh(bottom, width, height=0.8, left=None, **kwargs)
代码实现:
1:生成第一个子图在1行2列第一列位置
ax1 = fig.add_subplot(121)
ax1.bar(x, y, width=0.5)
ax2.bar(x, y,tick_label=label)
4:设置第一个柱子离x轴 为5 ,第二、三、五个柱子不变,第四个柱子离x轴 为8
ax.bar(x,y,width=0.3,bottom=[5,0,0,8,0])
5:通过 facecolor(或fc) 关键字参数可以设置柱体颜色
ax1.bar(x, y, fc='c')
通过 color 关键字参数 可以一次性设置多个颜色
ax2.bar(x, y,color=['r', 'g', 'b']) # 或者color='rgb' , color='#FFE4C4'
6:edgecolor 或 ec 描边颜色为(cyan)
linestyle 或 ls 描边样式 (-.)
linewidth 或 lw 描边宽度(5)
柱子颜色(#EECFA1)
plt.bar(x, y, ec='c', ls='-.', lw=5,color='#EECFA1')
7:hatch 关键字可用来设置填充样式,可取值为: / , \ , | , - , + , x , o , O , . , * 。
plt.bar(x, y, ec='c', ls='-.', lw=5,color='#EEDC82',hatch='*')
8:并列柱状图
import numpy as np
#显示中文字体为SimHei
plt.rcParams['font.sans-serif']=['SimHei']
sale8 = [5,20,15,25,10]
sale9 = [10,15,25,30,5]
# x轴的刻度为1-5号衣服
labels = ["{}号衣服".format(i) for i in range(1,6)]
fig,ax = plt.subplots(figsize=(8,5),dpi=80)
width_1 = 0.4
ax.bar(np.arange(len(sale8)),sale8,width=width_1,tick_label=labels,label = "1月")
ax.bar(np.arange(len(sale9))+width_1,sale9,width=width_1,tick_label=labels,label="2月")
ax.legend()
plt.show()
9:正负条形图
import numpy as np
import matplotlib.pyplot as plt
x = np.array([5, 20, 15, 25, 10])
y = np.array([11, 15, 22, 14, 5])
plt.barh(range(len(x)), x)
plt.barh(range(len(y)), -y)
plt.show()
可视化直方图
直方图参数:
plt.hist(x, bins=None, range=None, density=None, weights=None, cumulative=False, bottom=None, histtype='bar', align='mid', orientation='vertical', rwidth=None, log=False, color=None, label=None, stacked=False, normed=None)
x:指定要绘制直方图的数据;输入值,这需要一个数组或者一个序列,不需要长度相同的数组。
bins:指定直方图条形的个数;
range:指定直方图数据的上下界,默认包含绘图数据的最大值和最小值;
density:布尔,可选。如果"True",返回元组的第一个元素将会将计数标准化以形成一个概率密度,也就是说,直方图下的面积(或积分)总和为1。这是通过将计数除以数字的数量来实现的观察乘以箱子的宽度而不是除以总数数量的观察。如果叠加也是“真实”的,那么柱状图被规范化为1。(替代normed)
weights:该参数可为每一个数据点设置权重;
cumulative:是否需要计算累计频数或频率;
bottom:可以为直方图的每个条形添加基准线,默认为0;
histtype:指定直方图的类型,默认为bar,除此还有’barstacked’, ‘step’, ‘stepfilled’;
align:设置条形边界值的对其方式,默认为mid,除此还有’left’和’right’;
orientation:设置直方图的摆放方向,默认为垂直方向;
rwidth:设置直方图条形宽度的百分比;
log:是否需要对绘图数据进行log变换;
color:设置直方图的填充色;
label:设置直方图的标签,可通过legend展示其图例;
stacked:当有多个数据时,是否需要将直方图呈堆叠摆放,默认水平摆放;
normed:是否将直方图的频数转换成频率;(弃用,被density替代)
alpha:透明度,浮点数。
可视化折线图
线的样式:
(1)颜色
plot 方法的关键字参数 color(或c) 用来设置线的颜色。可取值为:
颜色名称或简写
'b' blue(蓝色)
'g' green(绿色)
'r' red(红色)
'c' cyan(青色)
'm' magenta(品红)
'y' yellow(黄色)
'k' black(黑色)
'w' white(白色)
rgb
(r, g, b) 或 (r, g, b, a),其中 r g b a 取均为[0, 1]之间
[0, 1]之间的浮点数的字符串形式,表示灰度值。0表示黑色,1表示白色
(2)样式
plot 方法的关键字参数 linestyle(或ls) 用来设置线的样式。可取值为:
'-', 'solid'
'--', 'dashed'
'-.', 'dashdot'
':', 'dotted'
'', ' ', 'None'
(3)粗细
设置 plot 方法的关键字参数 linewidth(或lw) 可以改变线的粗细,其值为浮点数。
marker
以下关键字参数可以用来设置marker的样式:
marker 标记类型
markeredgecolor 或 mec 标记边界颜色
markeredgewidth 或 mew 标记宽度
markerfacecolor 或 mfc 标记填充色
markersize 或 ms 标记大小
其中 marker 可取值为:
'-' 实线
'--' 虚线
'-.' 点与线
':' 点
'.' 点标记
',' 像素标记
'o' 圆圈标记
'v' 倒三角标记
'^' 正三角标记
'<' 左三角标记
'>' 右三角标记
'1' 向下Y标记
'2' 向上Y标记
'3' 向左Y标记
'4' 向右Y标记
's' 正方形标记
'p' 五角星标记
'' 标记
'h' 六边形1 标记
'H' 六边形2 标记
'+' +标记
'x' x标记
'D' 钻石标记
'd' 薄砖石标记
'|' 垂直线标记
'_' 水平线标记
折线图一:
# !/usr/bin/env python
# -*- coding:utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
# 第一组数据
x1=np.arange(0,10)
y1=[10,13,5,40,30,60,70,12,55,25]
# 画一条折线
plt.plot(x1,y1,label='第一条线',marker='p',mfc='red',ms=20,alpha=0.7,mec='c')
# marker='p' 标记为五边形
# mfc='red' 标记为红色
# ms=20 标记大小为20
# mec='c' 标记边框颜色为 'c' cyan(青色)
# alpha=0.7 透明度为0.7
# x轴标签
plt.xlabel('横坐标')
# y轴标签
plt.ylabel('纵坐标')
# 可视化图标题
plt.title('折线图')
# 显示图例
plt.legend()
# 显示图形
plt.show()
折线图二:
# 第一组数据
x1=np.arange(0,10)
y1=[10,13,5,40,30,60,70,12,55,25]
# 第二组数据
x2=np.arange(0,10)
y2=[25,2,12,30,20,40,50,30,40,15]
plt.plot(x1,y1,label='第一条线',color='r',linewidth=3,marker='o',
mfc='w',markersize=12,mfcalt='b')
plt.plot(x2,y2,label='第二条线',linewidth=2)
# x轴标签
plt.xlabel('横坐标')
# y轴标签
plt.ylabel('纵坐标')
# 可视化图标题
plt.title('这是多条数据折线图')
# 显示图例
plt.legend()
# 显示图形
plt.show()
可视化箱线图
什么时箱线图:
箱线图 一般用来展现数据的分布(如上下四分位值、中位数等),同时,也可以用箱线图来反映数据的异常情况。
boxplot函数的参数解读:
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:设置须的属性,如颜色、粗细、线的类型等;
多图绘制:
plt.subplots:子图集合,当不指定 plt.subplots() 的 nrows 和 ncols 参数值时,默认只生成一张图。
默认 patch_artist=False,所以我们需要指定其参数值为 True,即可自动填充颜色。
figsize :指定图形大小
美化图形:
填充颜色基本遵循以下步骤:
指定箱线图中每个箱子的填充颜色,如:red、green、blue、pink 等 构造字典存放箱子配色 —— {箱线图中每个箱子patch:对应的配色color}
重新上色 —— patch.set_facecolor(color)
添加网格线:
指定在x轴上添加网格线(ax.xaxis.grid(True)),或者在y轴上添加网格线(ax.yaxis.grid(True))
指定 x 轴和 y 轴上的刻度个数(ax.set_xticks([1,2,3]),ax.set_yticks([1,2,3,4,5,6,7,8]))
设置 x 轴名称(ax.set_xlabel("xlabel"))
设置 y 轴名称(ax.set_xlabel("ylabel"))
import matplotlib.pyplot as plt
import numpy as np
all_data=[np.random.normal(0,std,100) for std in range(1,4)]
#首先有图(fig),然后有轴(ax)
fig,axes=plt.subplots(nrows=1,ncols=2,figsize=(9,4))
bplot1=axes[0].boxplot(all_data,
vert=True,
patch_artist=True)
bplot2 = axes[1].boxplot(all_data,
notch=True,
vert=True,
patch_artist=True)
#颜色填充
colors = ['pink', 'lightblue', 'lightgreen']
for bplot in (bplot1, bplot2):
for patch, color in zip(bplot['boxes'], colors):
patch.set_facecolor(color)
# 加水平网格线
for ax in axes:
ax.yaxis.grid(True) #在y轴上添加网格线
ax.set_xticks([y+1 for y in range(len(all_data))] ) #指定x轴的轴刻度个数
## [y+1 for y in range(len(all_data))]运行结果是[1,2,3]
ax.set_xlabel('xlabel') #设置x轴名称
ax.set_ylabel('ylabel') #设置y轴名称
# 添加刻度
# 添加刻度名称,我们需要使用 plt.setp() 函数:
# 加刻度名称
plt.setp(axes, xticks=[1,2,3],
xticklabels=['x1', 'x2', 'x3'])
# 我们的刻度数是哪些,以及我们想要它添加的刻度标签是什么。
plt.show()
可视化饼图
pie函数参数解读:
plt.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=None, radius=None, counterclock=True, wedgeprops=None, textprops=None, center=(0, 0), frame=False)
x:指定绘图的数据;
explode:指定饼图某些部分的突出显示,即呈现爆炸式;
labels:为饼图添加标签说明,类似于图例说明;
colors:指定饼图的填充色;
autopct:自动添加百分比显示,可以采用格式化的方法显示;
pctdistance:设置百分比标签与圆心的距离;
shadow:是否添加饼图的阴影效果;
labeldistance:设置各扇形标签(图例)与圆心的距离;
startangle:设置饼图的初始摆放角度;
radius:设置饼图的半径大小;
counterclock:是否让饼图按逆时针顺序呈现;
wedgeprops:设置饼图内外边界的属性,如边界线的粗细、颜色等;
textprops:设置饼图中文本的属性,如字体大小、颜色等;
center:指定饼图的中心点位置,默认为原点
frame:是否要显示饼图背后的图框,如果设置为True的话,需要同时控制图框x轴、y轴的范围和饼图的中心位置;
plt.pie(x,labels=labels)
2:绘制圆饼
# 设置x,y轴刻度一致,这样饼图才能是圆的
plt.axis('equal')
3:凸显
#0.1表示将B那一块凸显出来
explode = (0,0.1,0,0)
4:显示百分比
# 绘制饼图,autopct='%.0f%%' 显示百分比
plt.pie(x,labels=labels,autopct='%.0f%%')
5:绘制分离的饼状图
# 绘制饼图,autopct='%.0f%%' 显示百分比
# textprops = {'fontsize':30, 'color':'k'} 大小为30,颜色为黑色
# explode=explode 将B那一块凸显出来
plt.pie(x,labels=labels,autopct='%.0f%%',
textprops = {'fontsize':30, 'color':'k'},explode=explode)
6:绘制饼状图-阴影
# 绘制饼图,autopct='%.0f%%' 显示百分比
# textprops = {'fontsize':30, 'color':'k'} 大小为30,颜色为黑色
# explode=explode 将B那一块凸显出来
# shadow=True 显示阴影
plt.pie(x,labels=labels,autopct='%.0f%%',
textprops = {'fontsize':30, 'color':'k'},explode=explode,shadow=True)
7:绘制饼状图-角度
# 绘制饼图,autopct='%.0f%%' 显示百分比
# textprops = {'fontsize':30, 'color':'k'} 大小为30,颜色为黑色
# explode=explode 将B那一块凸显出来
# shadow=True 显示阴影
#startangle,起始角度,0,表示从0开始逆时针转,为第一块。选择从60度开始
plt.pie(x,labels=labels,autopct='%.0f%%',
textprops = {'fontsize':30, 'color':'k'},explode=explode,shadow=True,startangle=60)
8:绘制饼状图-圆心距离
# 绘制饼图,autopct='%.0f%%' 显示百分比
# textprops = {'fontsize':30, 'color':'k'} 大小为30,颜色为黑色
# explode=explode 将B那一块凸显出来
# shadow=True 显示阴影
#startangle,起始角度,0,表示从0开始逆时针转,为第一块。选择从60度开始
#pctdistance,百分比的文本离圆心的距离为0.5
plt.pie(x,labels=labels,autopct='%.0f%%', textprops = {'fontsize':30, 'color':'k'},
explode=explode,shadow=True,startangle=60,pctdistance = 0.5)
9:绘制饼状图-提示标签
#定义饼状图的标签,标签是列表
labels =[ '十五','三十','四十五','十']
可视化散点图
什么是散点图:
什么是散点图? 反映两组变量每个数据点的值,并且从散点图可以看出它们之间的相关性
参数介绍
plt.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, verts=None, edgecolors=None)
x,y 形如shape(n,)的数组,可选值
s 代表点的大小
c 代表点的填充颜色,点的颜色或颜色序列,默认蓝色。其它如c = 'r' (red); c = 'g' (green); c = 'k' (black) ; c = 'y'(yellow)
marker 点的形状,可选值,默认是圆
'-' 实线
'--' 虚线
'-.' 点与线
':' 点
'.' 点标记
',' 像素标记
'o' 圆圈标记
'v' 倒三角标记
'^' 正三角标记
'<' 左三角标记
'>' 右三角标记
'1' 向下Y标记
'2' 向上Y标记
'3' 向左Y标记
'4' 向右Y标记
's' 正方形标记
'p' 五角星标记
'*' *标记
'h' 六边形1 标记
'H' 六边形2 标记
'+' +标记
'x' x标记
'D' 钻石标记
'd' 薄砖石标记
'|' 垂直线标记
'_' 水平线标记
alpha:标量,可选,默认值:无, 0(透明)和1(不透明)之间的alpha混合值
edgecolors 点的边界颜色或颜色序列,可选值,默认值:None
# !/usr/bin/env python
# -*- coding:utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
#显示中文字体为SimHei
plt.rcParams['font.sans-serif']=['SimHei']
# 设置图大小8*5
plt.rcParams['figure.figsize']=[8,5]
# 设置字体大小
plt.rcParams['font.size']=16
# x轴标签大小
plt.rcParams['xtick.labelsize']=16
# y轴标签大小
plt.rcParams['ytick.labelsize']=16
# 身高数据(厘米)
height = [140,161,170,182,175,173,165,155,150,120]
# 体重数据(公斤)
weight = [38,50,58,80,70,69,55,45,40,30]
# 散点图
plt.scatter(height,weight,s=300,alpha=0.5)
plt.title('身高体重比例图')
plt.xlabel('身高数据(厘米)')
plt.ylabel('体重数据(公斤)')
plt.show()
以上是关于数据分析中各种图的主要内容,如果未能解决你的问题,请参考以下文章