Python数据可视化~绘制不同图表

使用matplotlib绘制简单图表

  • 正弦和余弦
  • 绘制折线图
  • 绘制柱形图或堆积柱形图
  • 绘制条形图or堆积条形图
  • 中文乱码解决
  • 绘制堆积面积图
  • 绘制直方图
  • 绘制饼图 or 圆环图
  • 绘制散点图 or 气泡图
  • 绘制箱形图
  • 绘制雷达图
  • 绘制误差棒图

正弦和余弦

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False


x = np.linspace(-np.pi, np.pi, 256, endpoint = True)
y1 , y2 = np.sin(x), np.cos(x)


plt.plot(x,y1,x,y2)
plt.xlabel('x轴')
plt.ylabel('y轴')

plt.xlim(x.min() * 1.5, x.max() * 1.5)
plt.xticks([-np.pi, -np.pi / 2, 0, np.pi / 2,np.pi],[r'$-\pi$',r'$-\pi/2$',r'$0$',r'$\pi/2$',r'$\pi$'])
plt.show()

Python数据可视化~绘制不同图表_第1张图片

绘制折线图

plot()函数

plot(x , y , fmt, scalex = True, data = None, label = None, *args, **kwargs)

x:x轴
y:y轴
fmt:表示快速设置线条样式的格式字符串
label:应用于图例的标签文本
plot()函数会返回一个 Line2D类对象(代表线条)的列表,

(1)调用plot()函数传入一个二维数组

arr = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
plt.plot(arr[0],arr[1:])
plt.show()

第一个二维数组,看作x轴的数据
(2) 多次调用plot()函数

plt.plot(x1,y1)
plt.plot(x2,y2)

实例
北京市未来15天最高气温最低气温
Python数据可视化~绘制不同图表_第2张图片

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(2,17)

y_max = np.array([28,27,29,28,28,30,25,32,32,32,32,32,27,30,31])
y_min = np.array([18,18,20,19,16,16,18,18,21,21,20,21,18,18,19])

plt.plot(x,y_max)
plt.plot(x,y_min)
plt.show()

效果如下
Python数据可视化~绘制不同图表_第3张图片

绘制柱形图或堆积柱形图

bar(x, height, width = 8, bottom = None, align = 'center', data = None, tick_label = None , xerr = None, yerr = None, error_kw= None, **kwargs)

x: 柱子x坐标
height: 柱子的高
width: 柱子的宽,默认是0.8
bottom: 柱子的底部y的坐标值,默认是0
align: 柱子的对齐方式,center就是中间,edge是左对齐
tick_label:柱子x轴的标签
xerr,yerr: If没设置None,需要添加水平/垂直误差棒???
error_kw: 误差棒的属性字典,字典的键对应errorbar()函数???

bar函数返回BarContainer类对象
BarContainer是一个包含矩形或误差棒的容器,可以看作一个元组,可以遍历所有矩形条,或误差棒,此外,还可以访问patches or errorbar属性,从而获得所有矩形条or误差棒???

实例
单个柱形图

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(5)
y1 = np.array([10,8,7,11,13])

bar_width = 0.3
plt.bar(x,y1,tick_label = ['a','b','c','d','e'],width=bar_width,align='edge',bottom=5)
plt.show()

Python数据可视化~绘制不同图表_第4张图片
这就是align的左对齐,bottom从5开始,最底下

多个柱形图

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(5)
y1 = np.array([10,8,7,11,13])
y2 = np.array([12,3,7,1,13])

bar_width = 0.3
plt.bar(x,y1,tick_label = ['a','b','c','d','e'],width=bar_width)
plt.bar(x + bar_width,y2,width=bar_width)
plt.show()

Python数据可视化~绘制不同图表_第5张图片
这里需要注意的是,画第二个柱形图的时候,x的坐标值,得是第一个坐标值的加上width的值,不然就会覆盖第一个柱形图

堆积柱形图

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(5)
y1 = np.array([10,8,7,11,13])
y2 = np.array([12,3,7,1,13])
bar_width = 0.3
plt.bar(x,y1,tick_label = ['a','b','c','d','e'],width=bar_width)
plt.bar(x,y2,width=bar_width,bottom=y1)
plt.show()

也就是应用了bottom加上,第一个柱形图的高度
Python数据可视化~绘制不同图表_第6张图片
有误差棒的柱形图

error = [2,1,2.5,2,1.5]
plt.bar(x,y1,tick_label = ['a','b','c','d','e'],width=bar_width)
plt.bar(x,y2,width=bar_width,bottom=y1,yerr = error)

Python数据可视化~绘制不同图表_第7张图片

绘制条形图or堆积条形图

barh(y, width, height = 0.8, left = None, align = 'center', *, **kwargs)

y:表示条形的y坐标
width: 宽度 默认是 0.8
heigth: 高度
left: 条形左侧坐标,默认为0
aligh: 对齐方式

返回BarContainer类对象

实例

import numpy as np
import matplotlib.pyplot as plt
x = np.arange(5)
y1 = np.array([10,8,7,11,13])
bar_height = 0.3
plt.barh(x,y1,tick_label = ['a','b','c','d','e'],height=bar_height)
plt.show()

Python数据可视化~绘制不同图表_第8张图片

多组条形图

import numpy as np
import matplotlib.pyplot as plt
y = np.arange(5)
x1 = np.array([10,8,7,11,13])
x2 = np.array([12,3,7,1,13])
bar_height = 0.3
plt.barh(y,x1,tick_label = ['a','b','c','d','e'],height=bar_height)
plt.barh(y + bar_width,x2,height=bar_height)
plt.show()

就是y轴加上第一个条形图的高度
Python数据可视化~绘制不同图表_第9张图片
堆积条形图

mport numpy as np
import matplotlib.pyplot as plt
y = np.arange(5)
x1 = np.array([10,8,7,11,13])
x2 = np.array([12,3,7,1,13])
bar_height = 0.3
plt.barh(y,x1,tick_label = ['a','b','c','d','e'],height=bar_height)
plt.barh(y,x2,height=bar_height,left = x1)
plt.show()

也就是left,相当于之前的bottom(柱形图的堆积)
Python数据可视化~绘制不同图表_第10张图片
误差棒堆积条形图

error = [2,1,2.5,2,1.5]
plt.barh(y,x1,tick_label = ['a','b','c','d','e'],height=bar_height)
plt.barh(y,x2,height=bar_height,left = x1, xerr = error)

Python数据可视化~绘制不同图表_第11张图片

中文乱码解决

特别注意,matplotlib默认不支持显示中文,需要把字体改为SimHei
???

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

绘制堆积面积图

stackplot(x, y, labels = (), baseline = 'zero', data = None, *args, **kwargs)

x:x轴的数据,可以是一维数组
y:y轴的数据,可以是二维数组 or 一维数组序列
labels:表示每组折现及填充区域的标签
baseline:计算基线的方法 包括‘zero’ ‘sym’ ‘wiggle’ ‘weighted_wiggle’
zero 恒定零基线 sym 对称于零基线 ‘wiggle’ 最小化平方斜率的总和,weighted_wiggle 执行相同的操作,但权重用于说明每层的大小

实例


import numpy as np
import matplotlib.pyplot as plt


x = np.arange(6)
y1 = np.array([1,4,3,5,6,7])
y2 = np.array([1,3,4,2,7,6])
y3 = np.array([3,4,3,6,5,5])
plt.stackplot(x,y1,y2,y3)
plt.show()

Python数据可视化~绘制不同图表_第12张图片
堆叠的顺序是先画的在底部

绘制直方图

hist(x, bins = None, range = None, density = None, weights = None, cumulative = False, bottom = None, histype = 'bar', align = 'mid', orientation = 'vertical', rwidth = None, log = False, label = None, stacked = False, normed = None, *, data = None, **kwargs)

x:x轴数据,单个数组or 多个数组
bins:矩形条个数 默认为10
range: 数据范围,If没有range,则范围(x.min(),x.max())
cumulative:是否计算累计频数or频率
histtype: 直方图类型,支持‘bar’,barstacked,step, stepfilled,bar是基础,barstacked 堆积直方图, step没有填充的线条直方图 stepfilled填充的线条直方图
align:对齐方式 left mid right 默认是mid
orientation: 矩形条摆放方式
rwidth:矩形条宽度的百分比
stacked:是否堆积
Python数据可视化~绘制不同图表_第13张图片

绘制饼图 or 圆环图

pie(x, explode  = None , labels = None , atuopct = None , pctdistance = 0.6 , shadow = False , labeldistance = 1.1 , startangle = None , radius = None, counterclock = True , wedgeprops = None, testprops = None, center = (0,0),frame = False , rotatelabels = False, *, data = None)

x: 扇形数据
explode: 扇形or楔形离开圆心的距离
labels:表示扇形 的标签
autopct: 表示控制扇形or楔形的数据显示的字符串
pctdistance: 扇形 对应数值标签离圆心的比例 默认0.6
shadow: 是否阴影
labeldistance:标签文本的绘制位置 默认1.1
startangle:起始绘制角度,默认从x轴正方向逆时针绘制
radius:半径
wedgeprops:控制扇形属性的一个字典
textprops: 控制扇形文本属性字典
center: 图表中心点位置 默认 (0,0)
frame: 是否显示图框


import numpy as np
import matplotlib.pyplot as plt
data = np.array([20,50,10,15,30,55])
pie_labels = np.array(['A','B','C','D','E','F'])
plt.pie(data,radius=1.5,labels=pie_labels,autopct='%.1f%%')
plt.show()

Python数据可视化~绘制不同图表_第14张图片
换成楔形的话



plt.pie(data,radius=1.5,labels=pie_labels,autopct='%.1f%%',pctdistance=0.75,wedgeprops={'width':0.7})
plt.show()

Python数据可视化~绘制不同图表_第15张图片
需要注意的是这里的pctdistance是标签的位置
实例

import numpy as np
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

kinds = ['购物','人情往来','餐饮美食','通信物流','生活日用','交通出行','休闲娱乐','其他']
money_scale = [800/3000,100/3000,1000/3000,200/3000,300/3000,200/3000,200/3000,200/3000]
plt.pie(money_scale,labels=kinds,autopct='%.1f%%',startangle=0,explode=[0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1])
plt.show()

Python数据可视化~绘制不同图表_第16张图片

绘制散点图 or 气泡图

scatter(x, y, s = None, c = None, marker = None, cmap = Nonem, norm = None, vmin = None, vmax = None, vmin = None , alpha = None, linewidths = None, verts = None, edgecolors = None, *, plotnonfinite = False, data = None, **kwargs)

x,y: 坐标
s: 数据点的大小
c:数据的颜色
marker: 数据点样式 ,默认是圆形
cmap:数据点颜色映射表,仅当参数c为浮点数组时使用
norm: 数据亮度
vmin,vmin:亮度的最大值and最小值,if传入norm,这两个直接忽略
alpha:表示透明度
linewidths:数据点边缘宽度
edgecolors:数据点边缘颜色

实例


import numpy as np
import matplotlib.pyplot as plt

num = 50

x = np.random.rand(num)
y = np.random.rand(num)

plt.scatter(x,y)
plt.show()

Python数据可视化~绘制不同图表_第17张图片

plt.scatter(x,y,s=(30 * np.random.rand(num))**2)

一句话,变成气泡图,s是面积
Python数据可视化~绘制不同图表_第18张图片

绘制箱形图

boxplot(x, notch = None, sym = None, vert = None, whis = None, positions = None, widths = None, patch_artist = None, bootstrap = None, usermedians = None, conf_intervals = None, meanline = None, showmeans = None,	showcaps,
showbox = None, showfilters = None, boxprops = None, labels = None,
fliterprops = None, medianprops = None, meanprops = None,capprops = None,
whiskerprops = None, manage_ticks = True, autorange = False,
zorder = None, *, data = None)

x: 数据
sym: 异常值对应符号,默认为空心圆圈
vert:是否垂直摆放
whis:表示箱型图上下须臾上下四分位的距离 默认是1.5倍
positions: 箱体的位置
widths:箱体的宽度 默认是0.5
patch_artist: 是否填充箱体的颜色 默认是不填充
meanline:是否用线条标出中位数 默认不使用
showcaps: 是否显示箱体顶部和底部的横线 默认显示
showfliers: 是否显示异常值 默认显示
labels: 标签
boxprops: 控制箱体的字典

实例

import numpy as np
import matplotlib.pyplot as plt

data = np.random.randn(100)
plt.boxplot(data,meanline=True,widths=0.3,patch_artist=True,showfliers=False)
plt.show()

Python数据可视化~绘制不同图表_第19张图片

绘制雷达图

polar(theta,r,**kwargs)

theta:表示每个数据点所在射线与极径的夹角
r表示每个数据点到远点的距离

绘制误差棒图

errorbar(x , y yerr = None, xerr = None, fmt = ' ' ,ecolor  = None,
elinewidth = None, capsize = None, barsabove = False, lolims = False,
uplims = False, xlolims = False, xuplims = False, errorevery = 1,
capthick = None, *, data = None, **kwargs)

x, y :坐标
xerr,yerr :表示误差范围
ecolor :误差棒线条颜色
elinewidth;误差棒线条宽度
capsize:误差棒边界横杆大小
capthick误差棒边界横杆厚度


import numpy as np
import matplotlib.pyplot as plt
x = np.arange(5)
y = (25,32,34,20,25)
y_offest = (3,5,2,3,3)
plt.errorbar(x,y,yerr=y_offest,capsize=3,capthick=2)
plt.show()
		

Python数据可视化~绘制不同图表_第20张图片

你可能感兴趣的:(python,matplotlib,numpy)