6 Matplotlib库实现数据可视化
6.1 Matplotlib的简述及安装
Matplotlib是Python 2D-绘图领域使用最广泛的套件。它能让使用者很轻松的将数据图形化,并且提供多样化的输出格式。
安装:Windows+R快捷键,打开cmd,输入:pip install Matplotlib,等待几秒就安装成功了
解决中文乱码问题:Matplotlib中文乱码解决方案(两种方式)_睿科知识云的博客-CSDN博客_matplotlib乱码在配置文件找到axes.unicode_minus = True 改为False,有可能在布置虚拟环境的时候是针对某一个项目导入的Matplotlib库(配置文件地址可能不同所以查看一下用代码地址)
import matplotlib
print(matplotlib.matplotlib_fname()) # 获得配置文件:matplotlibrc文件路径
6.2 Matplotlib的组成
- 画布:在Matplotlib被称为figure,在figure中可以包含一个或多个axes/plots;
- 纸:绘图区,Matplotlib被称为axes/subplot;
- axis:轴axis用于限制绘制图的边界,xaxis表示横轴或x轴,yaxis表示竖轴或y轴;
- artist:一个Matplotlib生成的图形中的一切都是artist对象,也可以说artist是所有其他类的父类,大多数artist对象都是在axes上所绑定,包括文本对象、Line2D对象等。
在绘图区里面有(来自1 小时入门 python 绘图库 matplotlib_哔哩哔哩_bilibili视频的截图):
其中:
- marker(标记点)的样式有以下参数
符号 | 对应点样式 |
o | 圆点 |
^ | 角朝上的三角形 |
> | 角朝右的三角形 |
< | 角朝左的三角形 |
v | 角朝下的三角形 |
1 | 角朝下的三角架 |
2 | 角朝上的三角架 |
3 | 角朝左的三角架 |
4 | 角朝右的三角架 |
s | 正方形 |
p | 五边形 |
P | 加号(填充)标记 |
h | 六边形1 |
H | 六边形2 |
8 | 八边形 |
D | 宽菱形 |
d | 小菱形 |
* | 以星号作为点 |
x | 以乘号作为点 |
X | 以乘号(填充)标记 |
+ | 以加号作为点 |
| | 以短竖线作为点 |
- | 以短横线作为点 |
- linestyle参数
符号 | 对应的线条样式 |
- | 实线 |
-- | 虚线 |
-. | 点画线 |
: | 点线 |
. | 点 |
, | 像素点 |
- 颜色参数,还有一些颜色对应的十六进制编码(不举例了)
符号 | 颜色 |
b | 蓝色(blue) |
g | 绿色(green) |
r | 红色(red) |
c | 青色(cyan) |
m | 品红色(magenta) |
y | 黄色(yellow) |
k | 黑色(black) |
w | 白色(white) |
这样看可用的颜色不多,想用RGB调色,但是Matplotlib库暂时不支持RGB,所用可以使用扩展库Seaborn,但Seaborn还依赖第三方库SciPy(提供线性代数计算的相关方法比如傅里叶变换、稀疏矩阵等),所以可以再cmd窗口下使用pip安装这两个库:
pip install seaborn
pip install scipy(这个库很大可能需要几分钟)
参数示例:
参数合并 | 解释 |
b | 默认形状的蓝色标记 |
or | 红色圆点 |
-g | 绿色实线 |
-- | 带有默认颜色的虚线 |
^k | 角朝上的黑色三角形 |
6.3 图像元素设置
6.3.1 画布属性
matplotlib.figure.Figure(figsize=None, dpi=None, *, facecolor=None, edgecolor=None, linewidth=0.0, frameon=None, subplotpars=None, tight_layout=None, constrained_layout=None, layout=None, **kwargs)
常用的参数说明:
- figsize(画布大小):(float, float),一对浮点型坐标,宽度、高度以英寸我i单位。默认为(6.4, 4.8)
- dpi(分辨率):float,画布的分辨率以每英寸点数为单位,默认为:100(相同的figsize,dpi越大,画布越大)
- facecolor(画布背景色):color,默认为白色
6.3.2 标题
plt.title('title_name'):添加画布标题
title常用参数说明:
- fontsize:设置字体大小,默认12,可选参数['x-small , 'x-small , 'small , ' medium ', 'arget', 'sx-large', 'sx-large']
- fontweight:设置字体粗细,可选参数['light', 'normal', 'medium ', 'semibold , 'bold , ' heavy ', 'black']
- fontstyle:设置字体类型,可选参数[ 'normal' | 'italic' | 'oblique' ],italic斜体,oblique倾斜
- verticalalignment:设置水平对齐方式,可选参数:'center', 'top', 'bottom' ,'baseline'
- horizontalalignment:设置垂直对齐方式,可选参数:left,right,center
- rotation(旋转角度):可选参数为:vertical,horizontal也可以为数字
- alpha:透明度,参数值0至1之间
- backgroundcolor:标题背景颜色
- bbox:给标题增加外框,常用参数如下: boxstyle方框外形,facecolor(简写fc)背景颜色,edgecolor(简写ec)边框线条颜色,edgewidth边框线条大小
6.3.3 轴
轴开关
plt.axis('off')
轴显示范围
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.plot([1, 2, 3, 4],[100, 200, 300, 400])
ax.set_xlim(0, 8)
ax.set_ylim(0, 6000)
ax.get_xlim() # 获取当前轴显示范围
ax.get_ylim()
设置axes脊柱(坐标系)
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
# 去掉脊柱(坐标系)
ax.spines['top'].set_visible(False) # 去掉上边框
ax.spines['bottom'].set_visible(False) # 去掉下边框
ax.spines['left'].set_visible(False) # 去掉左边框
ax.spines['right'].set_visible(False) # 去掉右边框# 移动脊柱
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
as.spines('bottom').set_position(('data', 0)) # 移动x轴,data为数据
ax.yaxis.set_ticks_position('left')
as.spines('left').set_position(('data', 0)) # 移动y轴data为数据# 设置边框线颜色
ax = plt.gca() # 获取当前的axes
spines['right'].set_color('blue')
spines['top'].set_color('none')# 设置边框线宽
ax.spines['left'].set_linewidth(5)# 设置边框线型
spines['left'].set_linestyle('--')
6.3.4 隐藏刻度线
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.tic_params(bottom=False, top=False, left=False, right=False)
6.3.5 网格线
grid(b, which, axis, color, linestyle, linewidth, **kwargs)
参数说明:
- b:布尔值
- which:取为'major','both'默认为'major'
- axis:取为'both'
- x/y linestyle:设置网格线风格,简写为ls
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.plot([1, 2, 3], [10, 40, 80])
# 只开横向网格线
plt.grid(True, axis='y')
# 只开纵向网格线
plt.grid(True, axis='x') # == ax.grid(True, axis='x')
6.3.6 图例
图例可以让图像更清晰
plt.legend(*args, **kwargs)
**kwargs包含的参数有:
- loc:图例位置,可取:‘best’、 ‘upper right’、‘upper left’、‘lower left’、‘lower right’、‘right’、‘center left’、‘center’、'right’、‘lower center’、‘upper center’、‘center’);
- borderpad:图例的内边距 ,None或者float;
- fontsize:int或float或{‘xx-small’, ‘x-small’, ‘small’, ‘medium’, ‘large’, ‘x-large’, ‘xx-large’},用于设置字体大小;
- frameon: 是否显示图例边框,None或者bool;
- fancybox:是否将图例框的边角设为圆形,None或者bool;
- framealpha:控制图例框的透明度,None或者float;
- ncol:图例列的数量,默认为1;
- title:图例的标题;
- shadow: 是否为图例边框添加阴影,None或者bool;
- markerfirst:bool量,True表示图例标签在句柄右侧,false反之;
- markerscale: 图例标记为原图的多少倍;
- labelspacing:图例中条目之间的距离,None或者float;
- handlelength:图例中句柄的长度;
- handles:填写用于添加到图例里的线条;
- labels:对应着添加到图例里线条的标签。
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-1,1,50)
y1 = 2*x + 1
y2 = x**2
plt.figure(num=1,figsize=(8,5))
# 用于设置x轴的范围
plt.xlim((-1,1))
# 用于设置y轴的范围
plt.ylim((-2,5))
# 设置x轴的名称
plt.xlabel('I am x label')
# 设置y轴的名称
plt.ylabel('I am y label')
# 将新的x轴上的坐标设置为-1到1间隔数为10
newTicks = np.linspace(-1,1,10)
plt.xticks(newTicks)
# 将y轴坐标按照一定格式设置字符,-2对应really bad,-1对应little bad
plt.yticks([-2,-1.0,0,1.5,3], ['really bad','little bad','normal','little good','pretty good'])
# 按照一定格式画线
line1, = plt.plot(x,y2,color = 'red',linewidth = 1.0,linestyle = '--',label = 'curve')
line2, = plt.plot(x,y1,label = 'straight line')
# 设置图例
plt.legend(loc = 'best', handles = [line1,line2,],labels = ['curve one','straight one'],shadow = True,fancybox = True,markerfirst = True,borderpad = 1.5,framealpha = 1,title = 'legend',labelspacing = 1.2)
plt.show()
6.3.7 辅助直线
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
# 水平线
ax.hlines('y轴坐标', 'x轴最小值', 'x轴最大值', '颜色', '线条样式', label='')
# 垂直线
ax.vlines('x轴坐标', 'y轴最小值', 'y轴最大值', '颜色', '线条样式', label='')
6.3.8 数据标注(文本注释)
1.plt.annotate( text, xy, xytext=None, xycoords='data', textcoords=None, arrowprops=None, annotation_clip=None, **kwargs),常用参数:
- text:要标注的内容
- xy:被标注的坐标,通过xycoords设置偏移偏移
- xytext:标注文字的坐标,通过textcoords设置偏移方式
- xycoords:用于设置xy的偏移方式
xycoords的参数有:
值 | 描述 |
figure points | 图中左下角的点 |
figure pixels | 图中左下角的像素 |
figure fraction | 图中的左下部分 |
axes points | 相对坐标轴左下角的点 |
axes pixels | 相对坐标轴左下角的像素 |
axes fraction | 坐标轴的左下一点 |
data | 使用被注释对象(参数为xy)的坐标系统(默认),相对坐标系 |
polar(theta,r) | if not native ‘data’ coordinatest |
- textcoords:用于设置xytext的偏移方式
textcoords参数有:
值 | 描述 |
offset points | 从xy值偏移,以点为单位 |
offset pixels | 从xy值偏移,以像素为单位 |
- color:设置字体颜色
- arrowprops:箭头参数,参数类型为字典dict
参数有:
- width:箭头的宽度,以点为单位
- headwidth:箭头底部的宽度,以点为单位
- headlength:箭头的长度,以点为单位
- shrink:从两端“收缩”的分数
- facecolor:箭头颜色
- arrowstyle:箭头的样式
- connectionstyle:用于设置连接方式,可以设置弧度等,可以用字符串代表一个箭头的样式,用于arrowstyle
值 | 属性 |
'-' | None |
‘->’ | head_length=0.4, head_width=0.2 |
'-[' | widthB=1.0, widthB=0.2, angleB=None |
'|-|' | widthA=1.0, widthB=1.0 |
'-|>' | head_length=0.4, head_width=0.2 |
'<-' | head_length=0.4, head_width=0.2 |
'<->' | head_length=0.4, head_width=0.2 |
'<|-' | head_length=0.4, head_width=0.2 |
'<|-|>' | head_length=0.4, head_width=0.2 |
'fancy' | head_length=0.4, head_width=0.4, tail_width=0.4 |
'simple' | head_length=0.5, head_width=0.5, tail_width=0.2 |
'wedge' | tail_width=0.3, shrink_factor=0.5 |
2. plt.text( x, y, s, fontdict=None, withdash=<deprecated parameter>, **kwargs),参数说明:
- x,y:代表标记所处的坐标值
- s:代表标记的文字
- fontsize:代表字体大小
- verticalalignment:垂直对齐方式 ,可以选择(‘center’ , ‘top’ , ‘bottom’ , ‘baseline’ )
- horizontalalignment:水平对齐方式 ,可以选择( ‘center’ , ‘right’ , ‘left’ )
- xycoords:选择指定的坐标轴系统,与annotate函数参数类似
- arrowprops:增加箭头,与annotate函数参数类似
- bbox:增加边框样式(boxstyle:方框外形;facecolor:背景颜色;edgecolor:边框线条颜色;edgewidth:边框线条大小)
# 使用例子
import matplotlib.pyplot as plt
import numpy as npx = np.linspace(-1, 1, 50)
y1 = 2*x + 1plt.xlim((-1, 1))
plt.ylim((-2, 5))
plt.xlabel('I am x label')
plt.ylabel('I am y label')
newTicks = np.linspace(-1,1,11)
plt.xticks(newTicks)
# y轴字体差别,设置成斜体
plt.yticks([-2, -1.0, 0, 1.5, 3],[r'$really\ bad$', r'$little\ bad$', r'$normal$', r'$little\ good$', r'$pretty\ good$'])
plt.plot(x, y1)
# 获得当前的axis
ax = plt.gca()
# 设置图像的上边、右边axis为无色
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')# 设置x轴坐标在下部
ax.xaxis.set_ticks_position('bottom')
# 设置x轴位于图像y=0处
ax.spines['bottom'].set_position(('data', 0))
# 设置x轴坐标在左部
ax.yaxis.set_ticks_position('left')
# 设置y轴位于图像x=0处
ax.spines['left'].set_position(('data',0))x0 = 0.5
y0 = x0*2+1
plt.scatter(x0, y0, s=50, color='green')
plt.plot([x0, x0], [y0, 0], '--', color='black')
plt.annotate('2x+1=y',xy=(x0, y0), # (x0,y0)代表被标注的坐标xycoords='data', # 代表使用被注释对象(参数为xy)的坐标系统xytext=(+30, -30), # 代表相对xy右偏移30单位,下偏移30单位textcoords='offset points', # 代表以点为单位fontsize=16, # 字体大小为16arrowprops=dict(arrowstyle='->', connectionstyle='arc3,rad=0.2') # 代表使用样式为’->'的箭头,并具有一定的连接弧度
)
plt.text(0.5, -1, # 0.5,-1代表被text所处的坐标'This is a text', # 标注的内容fontdict={'size': 12, 'color': 'green'}) # 字号为12,颜色为绿色
plt.show()
6.3.9 图的保存
plt.savefig('picture_name.jpg')
在show()前插入savefig,如果在show()后面会出现保存图片为空白现象。 savefig(fname,dpi=None,facecolorm"w",edgecolor="w",orientation=""portrait",papertype=None, bbox_inches=None)
参数解释:
- fname为保存图片的文件名或者类路径,格式为str。如果设置了format,它将确定输出格式。如果没设置format,有扩展名就按扩展名的格式保存。如果没有扩展名,默认值为.png,可以选择jpg.svg,pdf;
- dpi为分辨率,以每英寸点数为单位;
- bbox_inches为边框(以英寸为单位)︰仅保存图形的给定部分。如果参数为"tight",将图表多余的空白区域裁减掉。如果要保留图表周围多余的空白区域。可省略这个实参。
6.4 粗略画折线图与条形图
import matplotlib.pyplot as plt
# 折线图
fig, ax = plt.subplots() # 建立一张含有一个坐标系的画布
x = [1, 2, 3, 4] # 准备x轴数据,盛放数据的一个列表
y = [2, 1, 4, 3] # 准备y轴数据
ax.plot(x, y) # 把数据绘制在坐标系上
plt.show() # 显示图像
import matplotlib.pyplot as plt
# 条形图
x = [1, 2, 3, 4, 5, 6]
y = [2, 4, 6, 8, 10, 12]
fig, ax = plt.subplots() # 准备画布
ax.bar(x, y)
plt.show()
6.5 规范化画图
6.5.1 创建图形对象
1.figure对象
先建画布再添加坐标系
import matplotlib.pyplot as plt
# 先建画布
fig = plt.figure()
# 添加坐标系
axes1 = fig.add_axes([0.1, 0.1, 0.8, 0.8])
# 绘图
x = [1, 2, 3, 4, 5, 6]
y = [2, 4, 6, 8, 10, 12]
axes1.plot(x, y, 'r') # r表示线条为红色
plt.show()
注意:如果想在一个程序中运行多个图,可以对fig = plt.figure('pic_name'),对图名进行赋值,不同的图名就会在不同的图像中,比如下面代码有例8,例9,点击运行后会同时出现。
import numpy as np
import matplotlib.pyplot as plt
# 风格设置
print(plt.style.available)
'''
可调用的风格
['Solarize_Light2', '_classic_test_patch', '_mpl-gallery','_mpl-gallery-nogrid', 'bmh', 'classic', 'dark_background', 'fast', 'fivethirtyeight', 'ggplot', 'grayscale', 'seaborn-v0_8','seaborn-v0_8-bright', 'seaborn-v0_8-colorblind', 'seaborn-v0_8-dark', 'seaborn-v0_8-dark-palette', 'seaborn-v0_8-darkgrid', 'seaborn-v0_8-deep','seaborn-v0_8-muted', 'seaborn-v0_8-notebook', 'seaborn-v0_8-paper', 'seaborn-v0_8-pastel', 'seaborn-v0_8-poster', 'seaborn-v0_8-talk', 'seaborn-v0_8-ticks', 'seaborn-v0_8-white', 'seaborn-v0_8-whitegrid','tableau-colorblind10']
'''
plt.figure('例8')
x = np.arange(-10, 10)
y = np.sin(x)
plt.style.use('bmh') # 更改背景(一些seaborn的需要下载seaborn库)
plt.plot(x, y)
plt.figure('例9')
plt.xkcd() # 需要下载字体修改配置文件
plt.plot(x, y)
plt.show()
2.subplots对象(用的多!)
直接在一张画布上建立坐标系,可以是多个子图
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
x = [1, 2, 3]
y = [1, 2, 3]
ax.plot(x, y, 'y') # 添加黄色
plt.show()
import matplotlib.pyplot as plt
x = [1, 2, 3]
y = [1, 2, 3]
fig, axes = plt.subplots(nrows=1, ncols=2) # 1行2列,即1*2 = 2个子图
axes[0].plot(x, y, 'r') # 利用axes[0]序号来实现子图自定义顺序序列
axes[1].plot(x[::-1], y, 'r')
plt.show()
任何入刑的绘制都建议通过plt.figure()或者plt.sybplots()管理一个完整的图形对象,而不是简单使用一条语句,例如plt.plot(...)来绘图管理一个完整的图形对象,有很多好处。在图形的基础上,给后期添加图例、图形样式、标注等预留了很大的空间,并且代码也更加规范,可读性强。
import matplotlib.pyplot as plt
import numpy as np
n = np.array([0, 1, 2, 3, 4, 5])
fig, axes = plt.subplots(1, 3, figsize=(16, 5)) # 1行3列 1*3 = 3个图,figsize表示画布大小
x = [1, 2, 3]
# 通过指定axes[0]序号来实现子图自定义顺序序列
axes[0].scatter(x, x + 0.25*np.random.randn(len(x)))
axes[0].set_title('scatter') # 散点图axes[1].step(n, n**2, lw=2)
axes[1].set_title('step') # 阶梯图axes[2].bar(n, n**2, align='center', width=0.5, alpha=0.5)
axes[2].set_title('bar') # 条形图
plt.show()
6.5.2 准备数据
matplotlib接受的数据有三种:
- list(列表,上面也用到了)
- DataFrame
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('mtest.csv', encoding='utf-8')
x = df['日期'].tolist()
y = df['销售额'].tolist()
# dataframe 绘制条形图
plt.plot(x, y)
plt.xlabel('日期')
plt.ylabel('销售额/件')
plt.show()
- 数组numpy array
6.6 常见的图形绘制
代码 | 说明 |
matplotlib.pyplot.plot() | 折线图 |
matplotlib.pyplot.hist() | 柱形图 |
matplotlib.pyplot.bar() | 柱状图 |
matplotlib.pyplot.barh() | 直方图(横向条形图) |
matplotlib.pyplot.fill_between() matplotlib.pyplot.stackplot() |
面积图 |
matplotlib.pyplot.scatter() | 散点图 |
matplotlib.pyplot.pie() | 饼图 |
matplotlib.pyplot.contour() | 等高线图 |
matplotlib.pyplot.imshow() | 热力图 |
查看各种函数的参数利用help:
help(plt.plot)
6.6.1 折线图(plot())
使用场景:表现数据随时间等维度变化的趋势
参数解释:
- x(可选),y(如果只有一个参数,默认为y轴)
- color:颜色,可以设置16进制颜色码或英文单词
- alpha:透明度:范围0-1
- linestyle:折线样式
- linewidth:折线宽度
import matplotlib.pyplot as plt
y = [1, 2, 3, 4]
fig, ax = plt.subplots()
ax.plot(y, color='r', marker='o', alpha=0.6, linestyle='--', linewidth=2)
# 与上面语句作用一致:ax.plot(y, 'or', alpha=0.6, linestyle='--', linewidth=2)
plt.show()
6.6.2 条形图/柱状图(bar())
使用场景:不同种类数据的对比,数据差距通过高低对比直观显示
参数参考6.6.1
import matplotlib.pyplot as plt
a = [1, 2, 3, 4]
b = [100, 200, 300, 400]
plt.bar(a, b, color='g')
plt.show()
横向条形图:
import matplotlib.pyplot as plt
a = [1, 2, 3, 4]
b = [100, 200, 300, 400]
plt.barh(a, b, color='g', edgecolor='r')
plt.show()
6.6.3 散点图/气泡图(scatter())
应用场景:展示数据的相关性和分布关系,由X轴和Y轴两个变量组成。通过因变量(Y轴数值)随自变量(X轴数值)变化的呈现数据的大致趋势,同时指出从类别和颜色两个维度观察数据的分布情况。
常用参数解释:
- x, y:散点坐标
- s:散点的面积/大小
- c:散点的颜色(默认为蓝色b)
- marker:散点样式(默认值为实心圆o)
- alpha:散点透明度([0, 1]之间,0表示完全透明,1表示完全不透明)
- linewidths:散点边缘线宽
- edgecolors:散点边缘的颜色
import matplotlib.pyplot as plt
import numpy as np
random_x = np.random.uniform(0, 1, 1000)
random_y = np.random.uniform(0, 1, 1000)
color = np.tanh(random_x-random_y) # Tanh是双曲函数中的一个,Tanh()为双曲正切print(color)
plt.scatter(random_x, random_y, s=30, c=color, alpha=0.5)
plt.show()
6.6.4 面积图(fill_between()、stackplot())
使用场景:对折线下方的区域进行上色,可以进行多类数据的对比
1. fill_between(x, y1, y2=0, where=None, interpolate=False, step=None, *, data=None, **kwargs),返回PolyCollection对象
参数说明:
- x:定义两条曲线的节点的x坐标。长度为N的类数组结构。必备参数;
- y1:定义曲线的节点的y坐标。长度为N的类数组结构或者标量。必备参数;
- y2:定义第2条曲线的节点的y坐标。长度为N的类数组结构或者标量,默认值为0。可选参数;
- where:根据条件排除一些填充区域。长度为N的布尔数组。默认值为None。可选参数;
- interpolate:当该属性为True时将计算实际交点,并将填充区域延伸到此点,布尔值,默认值为False。注意:该属性只有使用了where属性且两条曲线相互交叉时才生效;
- step:拐点的计算方式,字符串,取值范围为{'pre', 'post', 'mid'}。默认值为None,可选参数;
- **kwargs:PolyCollection对象的相关属性。
import matplotlib.pyplot as plt
plt.style.use("ggplot")
x = range(1, 15)
y = [1, 4, 6, 8, 4, 5, 3, 2, 4, 1, 5, 6, 8, 7]plt.fill_between(x, y, color="skyblue", alpha=0.3)
plt.plot(x, y, color="skyblue")
plt.title("An area chart", loc="left")
plt.xlabel("Value of X")
plt.ylabel("Value of Y")
plt.show()
代码来自:Matplotlib绘图库入门(三):面积图_go2coding的博客-CSDN博客_matplotlib 面积图
2. stackplot(x, *args, labels=(), colors=None, baseline='zero', data=None, **kwargs) ,返回PolyCollection对象
参数说明(来自:matplotlib之pyplot模块——堆积面积图、主题河流图(stackplot)_mighty13的博客-CSDN博客_stackplot):
- x:形状为(N,)的类数组结构,即尺寸为N的一维数组。必备参数。
- y:形状为(M,N)的类数组结构,即尺寸为(M,N)的二维数组。必备参数。y参数有两种应用方式。
- stackplot(x, y) :y的形状为(M, N)
- stackplot(x, y1, y2, y3) :y1, y2, y3, y4 均为一维数组且长度为N。
- baseline:基线。字符串,取值范围为{'zero', 'sym', 'wiggle', 'weighted_wiggle'}。默认值为'zero'。可选参数。
- 'zero':以0为基线,比如绘制简单的堆积面积图。
- 'sym':以0上下对称,有时被称为主题河流图。
- 'wiggle':所有序列的斜率平方和最小。
- 'weighted_wiggle': 类似于'wiggle',但是增加各层的大小作为权重。绘制出的图形也被称为流图(streamgraph)。
- labels:为每个数据系列指定标签。长度为N的字符串列表。
- colors:每组面积图所使用的的颜色,循环使用。颜色列表或元组。
- **kwargs:Axes.fill_between支持的关键字参数。
import matplotlib.pyplot as plt
x = range(1, 6)
y = [[10, 4, 6, 5, 3], [12, 2, 7, 10, 1], [8, 18, 5, 7, 6]]pal = ["#9b59b6", "#e74c3c", "#34495e", "#2ecc71"]
plt.stackplot(x, y, labels=['A', 'B', 'C'], colors=pal, alpha=0.4)
plt.legend(loc='upper right')
plt.show()
代码来自:Matplotlib绘图库入门(三):面积图_go2coding的博客-CSDN博客_matplotlib 面积图
6.6.5 饼图(pie())
pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=0, radius=1, counterclock=True, wedgeprops=None, textprops=None, center=(0, 0), frame=False, rotatelabels=False, *, normalize=True, data=None)
一些参数说明:
- x:表示数据
- explode:指定每部分的偏移量
- labels:标签
- colors:颜色
- autopct:饼图上的数据标签显示方式
- pctdistance:每个饼切片的中心和通过autopct生成的文本开始之间的比例
- labeldistance:被画饼标记的直径,默认值:1.1
- shadow:阴影
- startangle:开始角度
- radius:半径
- frame:图框
- counterlock:指定指针方向,顺时针或者逆时针
import matplotlib.pyplot as plt
import random as ra
data = [ra.randint(0, 100) for i in range(1000)]a = [i for i in data if i < 30]
b = [i for i in data if i >= 30 and i<=60]
c = [i for i in data if i > 60]aSize = len(a)/1000
bSize = len(b)/1000
cSize = len(c)/1000label_list = ["小于30", "介于30与60", "大于60"] # 各部分标签
size = [aSize, bSize, cSize] # 各部分大小
color = ["pink", "yellow", "blue"] # 各部分颜色
explode = [0, 0.05, 0] # 各部分突出值
patches, l_text, p_text = plt.pie(size, explode=explode, colors=color, labels=label_list, labeldistance=1.1,autopct="%1.1f%%", shadow=False, startangle=90, pctdistance=0.6)
plt.axis("equal") # 设置横轴和纵轴大小相等,这样饼才是圆的
plt.legend()
plt.show()
6.6.6 极坐标图、雷达图和极轴图
极坐标柱状图是将柱形条显示在极坐标中,其不仅保留了直角坐标系中数据变化趋势的优点,而且图形表达形式也更加美观;把直角坐标折弯成圈,把柱子底部的宽度压缩成为1个点。
调用subplot()创建子图时通过设置projection='polar',便可创建一个极坐标子图,然后调用plot()在极坐标子图中绘图(来自:极坐标图、雷达图、极轴图——matplotlib常见图表绘制_编程歆妍的博客-CSDN博客)
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 极坐标图
s = pd.Series(np.arange(20))
fig = plt.figure(figsize=(8, 4))
ax = plt.subplot(111, projection='polar')
ax.plot(s, linestyle='-', marker='.', lw=2)
plt.show()
雷达图:
import numpy as np
import matplotlib.pyplot as plt
# 雷达图 - 极坐标的折线图/填图 - plt.plot()
plt.figure(figsize=(8, 4))
ax1= plt.subplot(111, projection='polar')
ax1.set_title('spot fish') # 创建标题
ax1.set_rlim(0, 12) # x轴显示范围# 创建数据
data1 = np.random.randint(1, 10, 10)
data2 = np.random.randint(1, 10, 10)
data3 = np.random.randint(1, 10, 10)
theta = np.arange(0, 2*np.pi, 2*np.pi/10)# 绘制雷达线
ax1.plot(theta, data1, '.-', label='data1')
ax1.fill(theta, data1, alpha=0.2)
ax1.plot(theta, data2, '.-', label='data2')
ax1.fill(theta, data2, alpha=0.2)
ax1.plot(theta, data3, '.-', label='data3')
ax1.fill(theta, data3, alpha=0.2)
plt.show()
极轴图
import numpy as np
import matplotlib.pyplot as plt
# 极轴图 - 极坐标的柱状图
plt.figure(figsize=(8, 4))
ax1 = plt.subplot(111, projection='polar')
ax1.set_title('spot fish') # 创建标题
ax1.set_rlim(0, 12) # x轴显示范围data = np.random.randint(1, 10, 10)
theta = np.arange(0, 2*np.pi, 2*np.pi/10)bar = ax1.bar(theta, data, alpha=0.5)
for r, bar in zip(data, bar):bar.set_facecolor(plt.cm.jet(r/10.)) # 设置颜色
plt.show()
6.6.7 热力图(imshow())
通过对色块来显示数据的统计图表。绘图时,需指定颜色映射的规则。例如:较大的值由较深的颜色表示,较小的值由较浅的颜色表示;较大的值由偏暖的颜色表示,较小的值由较冷的颜色表示等等。
使用场景:查看总体的情况、发现异常值、显示多个变量之间的差异,以及检测它们之间是否存在任何相关性。(学习来自:第六章 使用 matplotlib 绘制热力图_mr_songw的博客-CSDN博客_热力图)
import matplotlib.pyplot as plt
import numpy as np
# 加上不同色块所对应的数值的大小
vegetables = ["cucumber", "tomato", "lettuce", "asparagus","potato", "wheat", "barley"]
farmers = ["Farmer Joe", "Upland Bros.", "Smith Gardening","Agrifun", "Organiculture", "BioGoods Ltd.", "Cornylee Corp."]
# 将一个二维数组传入到 imshow 方法中便可以绘制一个热力图,每个色块的颜色代表数据的大小
harvest = np.array([[0.8, 2.4, 2.5, 3.9, 0.0, 4.0, 0.0],[2.4, 0.0, 4.0, 1.0, 2.7, 0.0, 0.0],[1.1, 2.4, 0.8, 4.3, 1.9, 4.4, 0.0],[0.6, 0.0, 0.3, 0.0, 3.1, 0.0, 0.0],[0.7, 1.7, 0.6, 2.6, 2.2, 6.2, 0.0],[1.3, 1.2, 0.0, 0.0, 0.0, 3.2, 5.1],[0.1, 2.0, 0.0, 1.4, 0.0, 1.9, 6.3]])
# 加上 x 轴和 y 轴的标签,并加上标题
plt.xticks(np.arange(len(farmers)), labels=farmers,rotation=45, rotation_mode="anchor", ha="right")
plt.yticks(np.arange(len(vegetables)), labels=vegetables)
plt.title("Harvest of local farmers (in tons/year)")# 通过一个循环来为每个色块加上对应的数值
for i in range(len(vegetables)):for j in range(len(farmers)):text = plt.text(j, i, harvest[i, j], ha="center", va="center", color="w")plt.imshow(harvest)
plt.colorbar()
plt.tight_layout()
plt.show()
6.6.8 叠加图以及一个画布放多个子图
一个图中可以放绘制多个图型
import numpy as np
import matplotlib.pyplot as plt
# 绘制多个线
# 首先要为每个图建立一个figure(画布),即 plt.figure() ,这样每个图会单独显示在一个窗口中
plt.figure('例1')
tang_numpy = np.arange(0, 10, 0.5)
plt.plot(tang_numpy, tang_numpy, 'r--',tang_numpy, tang_numpy**2, 'bs',tang_numpy, tang_numpy**3, 'go')
# 也可以写成
'''
plt.plot(tang_numpy, tang_numpy, 'r--')
plt.plot(tang_numpy, tang_numpy**2, 'bs')
plt.plot(tang_numpy, tang_numpy**3, 'go')
'
一个画布放多个子图:
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-10, 10)
y = np.sin(x)
# 子图
plt.figure('例2')
plt.subplot(211) # 211表示画的图是2行1列的,最后一个1表示子图当中的第1个图
plt.plot(x, y, color='r')
plt.subplot(212) # 211表示画的图是2行1列的,最后一个2表示子图当中的第2个图
plt.plot(x, y, color='b')
plt.figure('例3')
plt.subplot(121) # 121表示画的图是1行2列的,最后一个1表示子图当中的第1个图
plt.plot(x, y, color='r')
plt.subplot(122) # 122表示画的图是1行2列的,最后一个2表示子图当中的第2个图
plt.plot(x, y, color='b')
多图层叠加可以看这篇文章:matplotlib中的多图层叠加的问题_sunsoda的博客-CSDN博客_matplotlib图层
6.6.9 等高线图
绘制等高线常用的函数
- contourf(X,Y,f_x_y,8,alpha = 0.5,cmap = plt.cm.hot):作用:定义等高线图两条线之间的填充物。参数说明:①X,Y:网格化后的x,y坐标;②f_x_y:表示高度;③8:表示等高线要分为10块(输入0时等高线分为2块);④alpha:表示每个填充物的透明度;⑤cmap:表示填充的色调,其可选择的内容可以参考:https://matplotlib.org/examples/color/colormaps_reference.html
- contour(X,Y,f_x_y,8,colors='black',linewidth = 5):作用:定义等高线中的线。参数说明:①X,Y:网格化后的x,y坐标;②f_x_y:表示高度;③8:表示等高线要分为10块(输入0时等高线分为2块);④colors:线的颜色;⑤linewidth:线的宽度;
- clabel(C,inline = True,fontsize = 10):作用:定义等高线中的标签。参数说明:①C:需要添加标签的线;②inline:标签添加的位置,当其为True时是线会不会穿过数,当其为False时,线会穿过数字;③fontsize:标签大小。
import matplotlib.pyplot as plt
import numpy as npx = np.linspace(-1, 1, 50)
y = np.linspace(-1, 1, 50)
# x、y的网格化
X, Y = np.meshgrid(x,y)# 计算f(x,y)的值,对于等高线而言,其代表了高度
f_x_y = -(X**4+Y**3-2*X)*np.sin(X)# 调用等高线的填充物
plt.contourf(X, Y, f_x_y, 8, alpha=0.5, cmap=plt.cm.hot)# 定义等高线的线的颜色,宽度
C = plt.contour(X, Y, f_x_y, 8, colors='black', linewidth=5)# clabel用于定义等高线的标签
plt.clabel(C, inline=True, fontsize=10)plt.xticks(())
plt.yticks(())
plt.show()
这一章主要是从各种博客中学的(有一些在每个小节写了出处),还有主要的学习的博主:
tf好朋友之matplotlib的使用——contour等高线的绘制_Bubbliiiing的博客-CSDN博客_contour matplotlib
tf好朋友之matplotlib的使用——scatter散点图的绘制_Bubbliiiing的博客-CSDN博客
tf好朋友之matplotlib的使用——annotate标注的使用_Bubbliiiing的博客-CSDN博客
图例的讲解:tf好朋友之matplotlib的使用——legend图例的设置_Bubbliiiing的博客-CSDN博客
6 Matplotlib库实现数据可视化相关推荐
- python导出数据顿号做分隔符_Python语言和matplotlib库做数据可视化分析
这是我的第51篇原创文章,关于数据可视化分析. 阅读完本文,你可以知道: 1 Python语言的可视化库-matplotlib? 2 使用matplotlib实现常用的可视化? 0前言 数据记者和信息 ...
- Matplotlib库-Python数据可视化
Matplotlib基础 Matplotlib库介绍 Matplotlib是Python的绘图库,是和交互式的进行制图,而且可以方便的将它作为绘图软件,嵌入GUI应用程序中 Matplotlib库由各 ...
- Python生态概览(一):数据分析库、数据可视化库、文本处理库、机器学习库、深度学习库
一.Python库之数据分析:Numpy, Pandas, SciPy 二.Python库之数据可视化:Matplotlib,Seaborn, Mayavi 三.Python库之文本处理:PyPDF2 ...
- python matplotlib 地图_Python数据可视化,看这篇就够了
说到python的常见应用,很多人会想到python的数据分析,作为数据分析中的表现层面,数据可视化都是其中必不可少的部分.但本文并非只推荐无任何数据分析需求仅需要做漂亮可视化图表的人学习python ...
- Python matplotlib模块实现数据可视化
Python matplotlib模块实现数据可视化 代码如下: # -*- coding: utf-8 -*- import matplotlib.pyplot as plt import nump ...
- python可视化库matplotlib_Python数据可视化库-Matplotlib(一)
今天我们来学习一下python的数据可视化库,Matplotlib,是一个Python的2D绘图库 通过这个库,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率图,条形图,错误图,散点图等等 废 ...
- python pandas_Python库Pandas数据可视化实战案例
点击上方"爱好Python的胡同学",选择"星标"公众号 每晚八点,Python干货,不见不散! 数据可视化可以让我们很直观的发现数据中隐藏的规律,察觉到变量之 ...
- python导入数据库的数据怎么在qt界面里刷新_Python中使用pyqtgraph库实现数据可视化之逐点刷新波形图...
背景 pyqtgraph是Python平台上一种功能强大的2D/3D绘图库,相对于matplotlib库,由于内部实现方式上,使用了高速计算的numpy信号处理库以及Qt的GraphicsView框架 ...
- matplotlib对excel数据可视化
数据可视化 对excel文件中的数据进行分析和可视化 1.数据的获取 从https://datacatalog.worldbank.org/dataset/gender-statistics网站下 ...
最新文章
- html5的音乐标签使用,html5 音乐播放器 audio 标签使用概述_html5教程技巧
- 自适应登陆html5,html5验证自适应
- Debian/Ubuntu下安装Apache的Mod_Rewrite模块的步骤分享
- java 自定义报表_灵活数据分析 | 自定义数据分析_集力数据系统平台_Java报表系统软件...
- redis源码剖析(十二)—— RDB持久化
- PHP闭包(Closure)初探(转载 http://my.oschina.net/melonol/blog/126694?p=2#comments)
- 实时事理逻辑知识库(事理图谱)终身学习项目-EventKGNELL(学迹)
- Swap in C C++ C# Java
- idea无限重置插件安装
- chrome浏览器设置思源黑体
- win2003服务器360修复漏洞打不开网页,win7电脑使用360浏览器打不开网页的有效恢复方法...
- 无限火力机器人一拳流出装_LOL无限火力再出赖皮套路,机器人无限击飞,需要两件装备!...
- 怎样制作GIF拼图?教你一键在线拼图
- 如何提升数据思维能力?
- thinkpad e450 win7黑苹果macos 10.10.5(网/显/声卡驱动)安装成功
- ubuntu安装cad快速看图linux版
- linux安装光盘下载,教你如何下载Fedora 7安装光盘
- php里面substr函数,PHP substr()函数
- Appium:获取Android设备手机屏幕分辨率
- C++ 设计模式之单例模式