当前位置:   article > 正文

数据分析中部分常用绘图库学习小结_auto_add_to_figure

auto_add_to_figure

imageio

import imageio
  • 1

一、读取图片数据

im = imageio.imread(uri)
  • 1

uri:图片名称和路径
im是生成的帧数据,代表一帧

二、合成gif

imageio.mimsave(uri, ims, 'GIF', duration=0.1)
  • 1

uri:生成的gif名称和路径
ims:由多个帧数据im组成的列表
'GIF':指定生成gif
duration:帧与帧的间隔时间,单位为秒

matplotlib

from matplotlib import pyplot as plt
  • 1

一、画布设置

设置说明:matplotlib可以使用实例化对象后的方法进行设置,也可以直接使用plt的函数进行设置,下同
基本设置:
直接使用plt的函数设置:

plt.figure(figsize=(length, width)) #画布大小
  • 1
plt.subplot(rows, cols, loc) #子画布
  • 1

利用实例化对象的方法设置:

fig = plt.figure(figsize=(length, width)) #画布大小
  • 1
ax = fig.add_subplot(rows, cols, loc) #子画布
  • 1

fig:画布,参数分别是画布长度和宽度

ax:子画布,rows使fig分行,cols分列,loc是子画布的位置

画布微调:

fig.tight_layout()
  • 1
plt.tight_layout()
  • 1

可以自动调整一些重叠的情况

二、画图基本模式

plt.method()
  • 1
ax.method()
  • 1

可直接在plt下调用画图函数,也可使用画布实例的方法进行画图(下同)

三、额外信息添加

1、标题

#小标题
plt.title('title')

ax.set_title('title')
  • 1
  • 2
  • 3
  • 4
#总标题(一般用于有多幅子图的情况)
fig.suptitle('title')

plt.suptitle('title')
  • 1
  • 2
  • 3
  • 4

2、轴标签(以x轴为例)

plt.xlabel('xlabel')
  • 1
ax.set_xlabel('xlabel')
  • 1

3、范围限制(以x轴为例)

对二维:

plt.xlim(xmin=None, xmax=None)
  • 1
ax.set_xlim(xmin=None, xmax=None)
  • 1

对三维:只能调用实例化方法

ax.set_xlim3d(xmin=None, xmax=None)
  • 1

4、增加网格背景

plt.grid(True)
  • 1
ax.grid(True)
  • 1

5、设置x轴和y轴刻度间隔相等

plt.axis('equal')
  • 1
ax.axis('equal')
  • 1

6、设置坐标轴是否使用科学计数法

plt.ticklabel_format(axis='both', style='', scilimits=None)
  • 1
ax.ticklabel_format(axis='both', style='', scilimits=None)
  • 1

axis:可选'both''y''x',表示对哪个坐标轴生效
style:可选'sci''scientific''plain',前两个表示使用科学计数法,后一个表示不使用科学计数法
scilimits:元组形式, ( m , n ) (m, n) (m,n)表示该方法使用于范围在 ( 1 0 m , 1 0 n ) (10^{m}, 10^{n}) (10m,10n)范围内的数字, ( 0 , 0 ) (0, 0) (0,0)表示适用于所有数字

7、图例

plt.legend(prop={"size": 10}, loc='upper right', ncol=4)
  • 1

prop:size关键词可以控制图例的大小
loc:图例的位置
ncol:图例分为多少列
也可以直接使用plt.legend()来自动设置

四、输出、储存与清空

plt.show()            # 输出
  • 1
plt.save('filename')  # 储存
  • 1
plt.clf()             # 清空
  • 1

五、二维散点图与折线图

1、散点图

plt.scatter(x, y,
            s=None,
            c=None,
            marker=None,
            edgecolors=None) #ax的方法与此相同
  • 1
  • 2
  • 3
  • 4
  • 5

x,y:自变量数组与因变量数组
s:散点大小
c:散点颜色
marker:散点形状
edgecolors:散点边界颜色

2、折线图

plt.plot(x, y, 'o', color=None, markersize=None) #ax的方法与此相同
  • 1

x,y:自变量数组与因变量数组
'o':表示圆形散点,若增加该参数则会生成散点图
(散点标记:圆形o、正方形s、星形*、正三角^、倒三角v)
color:折线/散点颜色
markersize:散点的大小

六、三维散点图、折线图与曲面图

1、将画布转换为3D

直接调用plt函数:

from mpl_toolkits.mplot3d import Axes3D
ax = Axes3D(plt.figure(), auto_add_to_figure=False)
plt.axes(ax)
  • 1
  • 2
  • 3

使用实例化对象方法:

from mpl_toolkits.mplot3d import Axes3D
ax = Axes3D(fig, auto_add_to_figure=False)
fig.add_axes(ax)
  • 1
  • 2
  • 3

2、散点图

散点图只能只调用实例化的Axes3D的方法绘制

ax.scatter(x, y, z,
		   s=None,
		   c=None,
		   marker=None,
		   edgecolors=None)
  • 1
  • 2
  • 3
  • 4
  • 5

x,y,z:散点的各个坐标
s:散点大小
c:散点颜色
marker:散点形状
edgecolors:散点边界颜色

3、折线图

plt.plot(x, y, z, color=None) #ax的方法与此相同
  • 1

x,y,z:自变量数组与因变量数组
color:曲线颜色

4、曲面图

曲面图只能调用实例化的Axes3D的方法绘制

ax.plot_surface(X, Y, Z,
				rstride=1,
				cstride=1,
				cmap=None,
				facecolor=plt.cm.colors(data))
  • 1
  • 2
  • 3
  • 4
  • 5

X,Y:自变量网格数组
Z:对X, Y计算得到的因变量
rstride,cstride:行跨度与列跨度
cmap:曲面颜色(渐变色或纯色)
facecolor:自定义曲面颜色,colors为颜色板颜色,如rainbow、viridis、Reds、Blues等,data形状同Z(相当于是将imshow灰度图铺在曲面上)

七、灰度图

plt.imshow(Z, cmap=None) #ax的方法与此相同
  • 1

Z:网格数组
cmap:颜色(渐变色或纯色)

八、流线图

plt.streamplot(x, y, U, V,
     	       density=0.5,
     	       linewidth=2,
     	       color=None) #ax的方法与此相同
  • 1
  • 2
  • 3
  • 4

x,y:自变量一维数组
U,V:x方向和y方向的矢量分量网格数组
density:流线密度
linewidth:流线宽度
color:颜色

九、等势图

plt.contourf(X, Y, Z, n1, cmap=None)            #绘制颜色
lines = plt.contour(X, Y, Z, n2, colors=None)   #绘制等势线并赋值
plt.clabel(lines, inline=True, fontsize=None)   #绘制等势线上的数字
#ax的方法与此相同
  • 1
  • 2
  • 3
  • 4

X,Y:自变量网格数组
Z:对X, Y计算得到的因变量
n1,n2:颜色变化速度与等势线密度
inline:等势线不遮挡数字
fontsize:数字大小

十、雷达图

直接调用plt函数:

plt.subplot(rows, cols, loc, polar=True) #建立极坐标画布
plt.plot(rads, data, label=None)         #绘制雷达折线
plt.fill(rads, data, alpha=None)         #填充颜色
plt.thetagrids(180 * rads / np.pi, labels=None)      #对齐
plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5

使用实例化对象方法:

ax = fig.add_subplot(rows, cols, loc, polar=True)  #建立极坐标画布
ax.plot(rads, data, label=None)                    #绘制雷达折线
ax.fill(rads, data, alpha=None)                    #填充颜色
ax.set_thetagrids(180 * rads / np.pi, labels=None) #对齐
  • 1
  • 2
  • 3
  • 4

label:图例
alpha:填充颜色透明度
labels:标签数组
rads:弧度数组,首尾需相同
data:数据数组,首尾需相同

十一、小提琴图

plt.violinplot(dataset,
               vert=True,
               widths=0.5,
               showmeans=False,
               showextrema=True,
               quantiles=None)
#ax的方法与此相同
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

dataset:数据,数据类型为二维数组,每一列组成一个小提琴图;若为一维数组,则绘制单个小提琴图
vert:是否要垂直放置,默认为竖直放置
widths:图形最大宽度
showmeans:是否显示均值点
showextrema:是否显示数据极限值
quantiles:列表类型,列表元素在0到1之间,表示显示这些n分点

十二、箱型图

plt.boxplot(x, labels=None, vert=None, showmeans=None) #ax的方法与此相同
  • 1

x:数据,输入若为二维ndarray,每一列组成一个箱型图;若为一维ndarray,则绘制单个箱型图;若为列表或列表内嵌套ndarray,则每一行组成一个箱型图
labels:每一列的标签,默认为整数1, 2, 3, …
vert:是否要垂直放置,默认为竖直放置
showmeans:是否显示平均值,默认不显示

十三、条形图

plt.bar(x, height, width=0.8, alpha=1, hatch=None) #ax的方法与此相同
  • 1

x:横坐标数据
height:纵坐标数据
width:条形宽度
alpha:条形的透明度
hatch:条形的纹理,可选'/','\','|', '-', '+', 'x', 'o', 'O', '.', '*',可以组合

十四、文字标签

文字标签与其他图像不同,画布不能自适应文字标签的位置,所以可以出现文字标签在坐标轴限制以外的区域的现象

plt.text(x, y, s,
         c=None,
		 fontsize=10,
		 verticalalignment='bottom',
		 horizontalalignment='left',
		 rotation=0,
		 alpha=1)
#ax的方法与此相同
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

x, y:浮点数类型(不能是列表),文字标签的位置
s:字符串类型,文字标签的内容
c:文字标签颜色
fontsize:整型,文字标签大小
verticalalignment:垂直对齐方式,可选'center''top''bottom''baseline'
horizontalalignment:水平对齐方式,可选'center''right''left'
rotation:文字标签旋转角度,逆时针为正
alpha:文字标签透明度,范围为0~1

十五、绘制GIF或mp4

主要使用的是matplotlib的animation模块中的FuncAnimation函数

FuncAnimation(fig, update, frames, interval=200)
  • 1

fig:画布
update:更新函数
frames:迭代帧列表,将列表的每个元素作为参数输入到update函数中
interval:帧与帧之间的间隔时间,单位为ms,默认为200

例子
保存为GIF:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation


fig = plt.figure()
x, y = [], []
pic, = plt.plot([], [], 'r', animated=False)
plt.title('alpha test')
plt.xlim(0, 2 * np.pi)
plt.ylim(-1, 1)

def update(n):
    x.append(n)
    y.append(np.sin(n))
    pic.set_data(x, y)
    return pic,

ani = FuncAnimation(fig, update, frames=np.arange(0, 2*np.pi, 0.01), interval=20)
ani.save('fig_name.gif')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

若保存为mp4:
首先需要下载ffmpeg并添加进环境变量,具体见操作

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
plt.rcParams['animation.ffmpeg_path'] = 'the_path_of_ffmpeg.exe'


fig = plt.figure()
x, y = [], []
pic, = plt.plot([], [], 'r', animated=False)
plt.title('alpha test')
plt.xlim(0, 2 * np.pi)
plt.ylim(-1, 1)

def update(n):
    x.append(n)
    y.append(np.sin(n))
    pic.set_data(x, y)
    return pic,

ani = FuncAnimation(fig, update, frames=np.arange(0, 2*np.pi, 0.01), interval=20)
ani.save('fig_name.mp4')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

注意,该函数不能直接在Jupyter中使用,且pic后面的逗号不能省略

十六、解决无法显示中文

在代码前加上:

plt.rcParams['font.sans-serif'] = ['字体']
  • 1

import matplotlib
matplotlib.rcParams['font.sans-serif'] = ['字体']
  • 1
  • 2

‘字体’:各类中文字体的英文代码,部分如下:
'SimHei':黑体
'SimSun':宋体
'FangSong':仿宋
'NSimSun':新宋体
'KaiTi':楷体
'PMingLiU':新细明体
'Times New Roman':TNR字体

十七、解决无法显示负号

在代码前加上:

plt.rcParams['axes.unicode_minus'] = False
  • 1

import matplotlib
matplotlib.rcParams['axes.unicode_minus'] = False
  • 1
  • 2

十七、切换作图样式

在代码前加上:

plt.style.use('style_name')
  • 1

style_name为样式名称,如classic
样式种类列表可以通过下列代码查看:

plt.style.available
  • 1

十八、设置colorbar的颜色数值上下限

plt.clim(vmin, vmax)
  • 1

vmin:最小值
vmax:最大值

十九、获取matplotlib内置颜色板的RGB值

获取RGB值

from matplotlib import cm

cmap = cm.colors
  • 1
  • 2
  • 3

其中colors是颜色板

cmap.N   # 表示该颜色板的颜色总数
cmap(i)  # 表示颜色版的第i个颜色
  • 1
  • 2

转化为十六进制

import matplotlib

matplotlib.colors.rgb2hex(rgba)
  • 1
  • 2
  • 3

其中,rgba是13列表或元素的RGB值或14的列表或元组的RGBA值

例子:获取rainbow的RGB值并转换为十六进制

from matplotlib import cm
import matplotlib

cmap = cm.rainbow
range_color = []
for i in range(cmap.N):
    rgb = cmap(i)
    range_color.append(matplotlib.colors.rgb2hex(rgb))

print(range_color)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

二十、设置双y轴绘图、复合图例

在绘制两个不同的图之间加入以下代码:plt.twinx()ax = ax.twinx()即可

在绘制双y轴图像时,直接使用图例会重叠,因此需要使用下述办法:
1、先将绘图对象赋值,如绘制折线图时:

line_1, = plt.plot(..., label='xxx')
  • 1

line_1, = ax.plot(..., label='xxx')
  • 1

此处必须使用逗号
2、使用如下代码以显示复合图例

ax_list = [line_1, line_2, ...]
lables = [name.get_label() for name in ax_list]
plt.legend(ax_list, lables)
  • 1
  • 2
  • 3

pyecharts

import pyecharts
  • 1

一、配置

1、基本配置

pip install pyecharts
  • 1

2、地图配置

pip install echarts-countries-pypkg
pip install echarts-china-provinces-pypkg
pip install echarts-china-cities-pypkg
  • 1
  • 2
  • 3

自上而下分别为:世界上各国位置信息,中国各省位置信息,中国各市位置信息

3、以图片形式保存配置

pip install snapshot-selenium
  • 1

安装了pyecharts-snapshot后,需要下载chrome浏览器与相应版本的chromedriver,并将chromedriver.exe放在python文件夹的Scripts文件夹下

二、保存(绘图对象fig的函数)

1、以html格式保存

fig.render(filename)
  • 1

filename:输出的文件名

2、以png格式保存

from pyecharts.render import make_snapshot
from snapshot_selenium import snapshot
make_snapshot(snapshot, fig.render(), filename)
  • 1
  • 2
  • 3

filename:输出的文件名

三、画图

1、查看官方文档

https://pyecharts.org/#/

2、数据格式

pyecharts画图输入的数据格式是list
对于3D图,数据格式是二维list
list的每一个元素是相应的坐标点,如:

[[x1, y1, z1],
 [x2, y2, z2],
 ...,
 [xn, yn, zn]]
  • 1
  • 2
  • 3
  • 4

其中[xi, yi, zi]代表一个点的三维坐标

另外:对于处理成ndarray的数据类型,在转换为list时,要使用ndarray自身的tolist()方法,而不能使用list()强制转换

四、方法的链式调用

绘图对象的方法均可以链式调用,即fig.method1().method2().method3()...

set_global_opts方法

.set_global_opts(
        visualmap_opts=opts.VisualMapOpts(
            dimension=2,
            max_=1,   # 3D图像颜色板的最大值
            min_=-1,  # 3D图像颜色板的最小值
            range_color=range_color,  # 一维列表,3D图像颜色板(十六进制)
        ),
        title_opts=opts.TitleOpts(title='主标题', subtitle='副标题'),  # 主标题和副标题
        toolbox_opts=opts.ToolboxOpts()  # 显示工具箱
    )
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

render方法

.render(filename)
  • 1

同图片保存所述,保存图片为可交互html

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号