基于matplotlib的数据可视化

栏目: 编程工具 · 发布时间: 5年前

内容简介:1 基本绘图在plot()函数中只有x,y两个量时。
编辑推荐:
本文来源csdn,本文通过对绘图和属性设置的描述,举例说明了matplotlib的数据可视化,希望对您的学习有所帮助。

1 基本绘图

在plot()函数中只有x,y两个量时。

import numpy as np

import matplotlib.pyplot as plt

# 生成曲线上各个点的x,y坐标,然后用一段段直线连起来

# 利用linspace函数产生一个等差数列

x = np.linspace(-np.pi, np.pi, 200)

cos_y = np.cos(x) / 2

sin_y = np.sin(x)

# 用直线连接曲线上各点

plt.plot(x, cos_y)

plt.plot(x, sin_y)

# 显示图形

plt.show()

基于matplotlib的数据可视化

注释:np.linspace() 函数的基本用法

回到顶部

2 线属性设置

线的属性主要有线型、线宽 和 颜色 等。

import numpy as np

import matplotlib.pyplot as plt

x = np.linspace(-np.pi, np.pi, 200)

cos_y = np.cos(x) / 2

sin_y = np.sin(x)

# 用直线连接曲线上各点

plt.plot(x, cos_y, linestyle='--', linewidth=1,color='dodgerblue')

plt.plot(x, sin_y, linestyle=':', linewidth=2.5,color='orangered')

plt.show()

基于matplotlib的数据可视化

3 坐标轴设置

坐标轴设置主要有坐标轴范围、坐标轴名称、坐标轴刻度、十字坐标等

3.1 获取坐标轴

坐标轴的设置必须先获得坐标轴,再对坐标轴进行操作

获取坐标轴的方法:ax = plt.gca()

gca - get current axes

注意,坐标轴共有四个top、 bottom、 left、 right

3.2 获取轴并操作

先通过gca获取当前轴,再对轴进行操作

# 获取当前坐标轴对象

ax = mp.gca()

# 将上、右轴设置为none / None

ax.spines['top'].set_color('none')

ax.spines['right'].set_color('none')

当然,也可通过 ax.spines 捕捉 bottom、left 坐标轴,并进行操作

3.3 指定坐标轴位置

通过 set_position( (position type, amount) ) 改变 spine 位置;spine 的位置是由 (position type, amount) 来确定的

position type(amount)

(1)axis(0.0~1.0):把spine放在指定的轴坐标(Axes coordinate)上,范围值为从0.0到1.0(对应坐标自左向右);0表示最左边,1表示最右边,0.5表示中间位置

(2)data(number):把spine 放在指定的数据坐标(data coordinate)上,number的范围值与 bottom 和 top的关系 有关,0表示坐标轴上 0 值位点

(3)outward :通过specified number of points 将 spine 从数据区移出。

(3)place the spine out from the data area by the specified number of points. (Negative values specify placing the spine inward.)

例如

import numpy as np

import matplotlib.pyplot as mp

x = np.linspace(-np.pi, np.pi, 200) # 产生一个等差数列

cos_y = np.cos(x)

sin_y = np.sin(x)

ax = mp.gca()

ax.spines['left'].set_position(('axes',0.5))

ax.spines['bottom'].set_position(('data', 0))

# 将右边框和顶边框设置成无色

ax.spines['right'].set_color('None')

ax.spines['top'].set_color('None')

# 用直线连接曲线上各点

mp.plot(x, cos_y, linestyle='--', linewidth=1,color='dodgerblue')

mp.plot(x, sin_y, linestyle=':', linewidth=1.2,color='orangered')

# 显示图形

mp.show()

(a)ax.spines['bottom'].set_position(('data', 0))

基于matplotlib的数据可视化

(b) ax.spines['bottom'].set_position(('data', -3))

基于matplotlib的数据可视化

(c)ax.spines['bottom'].set_position(('data', -4))

抛出错误:

raise ValueError('bottom cannot be >= top')

ValueError: bottom cannot be >= top

在这里,由于本案例中是对称的, ax.spines['bottom'].set_position(('data', 4)) 这里 4 与 -4 是一致的,采用 -4 主要说明报错的原因 bottom cannot be >= top 想不通原因。

这里面由两个原因没搞明白:

(1)范围值(如 4 )这个值是怎么界定的,当然在3到4之间还有系列值,此处不枚举;

(2)负值向下移动,应该是bottom - > bottom,为什么会有top值(bottom cannot be >= top)。

3.4 设置坐标轴范围

设置 x 轴范围:plt.xlim(最小值,最大值)

设置 y 轴范围:plt.ylim(最小值,最大值)

3.5 设置坐标轴名称

设置 x 轴名称:plt.xlabel(' 字符串 str ')

设置 y 轴名称:plt.ylabel(' 字符串 str ')

注意:字符串如果是中文,容易出错。

3.6 设置坐标轴刻度

设置 x 轴刻度:plt.xticks(刻度标签位置,刻度标签文本)

设置 y 轴刻度:plt.yticks(刻度标签位置,刻度标签文本)

3.7 刻度定位器

set_major_locator(): 设置主刻度定位器

set_minor_locator(): 设置次刻度定位器

常见参数

NullLocator() 空,不做刻度标记

MaxNLocator() 指定最多刻度数

FixedLocator() 由参数指定刻度

AutoLocator() 默认的,自动选择最合理的刻度

IndexLocator() 根据偏移和增量定位刻度

MultipleLocator() 根据指定的距离定位刻度

LinearLocator() 根据指定的总刻度数定位刻度

LogLocator() 根据指定的底数和指数定位刻度

具体示例

import numpy as np

import matplotlib.pyplot as plt

plt.figure('Locator')

locators = [

'plt.NullLocator()',

'plt.MaxNLocator(nbins=3,steps=[3,5,7,9])',

'plt.FixedLocator(locs=[0,2.5,5,7.5,10])',

'plt.AutoLocator()',

'plt.IndexLocator(offset=0.5, base=1.5)',

'plt.MultipleLocator()',

'plt.LinearLocator(numticks=21)',

'plt.LogLocator(base=2, subs=[1.0])']

n_locators = len(locators)

for i, locator in enumerate(locators):

plt.subplot(n_locators, 1, i + 1)

plt.xlim(0, 10)

plt.ylim(-1, 1)

plt.yticks(())

ax = plt.gca()

ax.spines['left'].set_color('none')

ax.spines['right'].set_color('none')

ax.spines['top'].set_color('none')

ax.spines['bottom'].set_position(('data', 0))

ax.xaxis.set_major_locator(eval(locator))

ax.xaxis.set_minor_locator(plt.MultipleLocator(0.1))

plt.plot(np.arange(11), np.zeros(11))

plt.text(5, 0.3, locator[3:], ha='center', size=10)

plt.tight_layout()

plt.show()

基于matplotlib的数据可视化

3.8 设置刻度位置

设置 x 轴的刻度值位置(下方):ax.xaxis.set_ticks_position('bottom')

设置 y 轴的刻度值位置(左侧):ax.yaxis.set_ticks_position('left')

注:ax = mp.gca()

接受值(ACCEPTS):: [ 'left' | 'right' | 'both' | 'default' | 'none' | ‘top’ | 'bottom' ]

也可以通过 top 将刻度值位置甚至在顶部

3.9 应用实例

import numpy as np

import matplotlib.pyplot as plt

# 生成曲线上各个点的x,y坐标,然后用一段段直线连起来

x = np.linspace(-np.pi, np.pi, 200) # 产生一个等差数列

cos_y = np.cos(x) / 2

sin_y = np.sin(x)

# 设置坐标范围

plt.xlim(x.min() * 1.1, x.max() * 1.1)

plt.ylim(min(cos_y.min(), sin_y.min()) * 1.1,

max(cos_y.max(), sin_y.max()) * 1.1)

# 设置坐标轴刻度标签

plt.xticks([-np.pi, -np.pi / 2, 0, np.pi / 2, np.pi * 3 / 4, np.pi],

[r'$-\pi$', r'$-\frac{\pi}{2}$', r'0',

r'$\frac{\pi}{2}$', r'$\frac{3\pi}{4}$', r'$\pi$'])

plt.yticks([-1, -0.5, 0.5, 1])

# 将矩形坐标轴改成十字坐标轴:

# 获取当前坐标轴对象

ax = plt.gca() # get current axis

# 将垂直坐标刻度置于左边框

ax.yaxis.set_ticks_position('left')

# 将左边框置于数据坐标原点

ax.spines['left'].set_position(('data', 0))

# 将水平坐标刻度置于底边框

ax.xaxis.set_ticks_position('bottom')

# 将底边框置于数据坐标原点

ax.spines['bottom'].set_position(('data', 0))

# 将右边框和顶边框设置成无色

ax.spines['right'].set_color('None')

ax.spines['top'].set_color('None')

# 用直线连接曲线上各点

plt.plot(x, cos_y, linestyle='--', linewidth=1,

color='dodgerblue')

plt.plot(x, sin_y, linestyle=':', linewidth=1.2,

color='orangered')

# 显示图形

plt.show()

基于matplotlib的数据可视化

import numpy as np

import matplotlib.pyplot as plt

# 生成曲线上各个点的x,y坐标,然后用一段段直线连起来

x = np.linspace(-np.pi, np.pi, 200) # 产生一个等差数列

cos_y = np.cos(x) / 2

sin_y = np.sin(x)

# 设置坐标范围

plt.xlim(x.min() * 1.1, x.max() * 1.1)

plt.ylim(min(cos_y.min(), sin_y.min()) * 1.1,

max(cos_y.max(), sin_y.max()) * 1.1)

# 设置坐标轴刻度标签

plt.xticks([-np.pi, -np.pi / 2, 0, np.pi / 2, np.pi * 3 / 4, np.pi],

[r'$-\pi$', r'$-\frac{\pi}{2}$', r'0',

r'$\frac{\pi}{2}$', r'$\frac{3\pi}{4}$', r'$\pi$'])

plt.yticks([-1, -0.5, 0.5, 1])

# 将矩形坐标轴改成十字坐标轴:

# 获取当前坐标轴对象

ax = plt.gca() # get current axis

# 将垂直坐标刻度置于左边框

ax.yaxis.set_ticks_position('none')

# 将左边框置于数据坐标原点

ax.spines['left'].set_position(('data', 0))

# 将水平坐标刻度置于底边框

ax.xaxis.set_ticks_position('none')

# 将底边框置于数据坐标原点

ax.spines['bottom'].set_position(('data', 0))

# 将右边框和顶边框设置成无色

ax.spines['right'].set_color('None')

ax.spines['top'].set_color('None')

# 用直线连接曲线上各点

plt.plot(x, cos_y, linestyle='--', linewidth=1,

color='dodgerblue')

plt.plot(x, sin_y, linestyle=':', linewidth=1.2,

color='orangered')

# 显示图形

plt.show()

基于matplotlib的数据可视化

参考:matplotlib模块数据可视化-修改坐标轴位置

回到顶部

4 显示图例

图例,简而言之,图中对象的标签。

语法:legend(*args, **kwargs)

Call signatures有三种不同的用法

(1)legend()

(2)legend(labels)

(3)legend(handles, labels)

4.1 自动检测图例中的元素 legend()

line, = ax.plot([1, 2, 3], label='Inline label')

ax.legend()

注:

注:

(1)Inline label 内联标签是在图例中显示的名字,需要修改。

(2)line = 与 line, = 是不同的,

当line = 时,[<matplotlib.lines.Line2D object at 0x000001FE32137CF8>]

也即返回值类型为 matplotlib.lines.Line2D object

当line, = 时,Line2D(y=12cos(x)y=12cos(x))

(3)既然存在存在line, = 时, 那会不会存在第二个呢,line_one, line_two = 时,会报错

ValueError: not enough values to unpack (expected 2, got 1)

4.2 标注绘图元素 legend(label)

为已存在的图创建图例,每一个图按顺序对应

ax.plot([1, 2, 3]) # 线1

ax.plot([-1, -2, -3]) # 线2

ax.legend([‘line_one', 'line_two'])

注:这种方式的“ 顺序对应 ” ,很容以被混淆easily be mixed up,所以不建议采用

4.3 显示定义图例中的元素legend(handles, labels)

Explicitly defining the elements in the legend

该方法可以有效避免图例与图的混淆关系,

line1, = ax.plot(y1)

line2, = ax.plot(y2)

plt.legend((line1, line2), ('label1', 'label2'))

4.4 在plt.plot()函数中定义label

该种方式不是帮助文档中的内容,但该方式更为简便

ax.plot(y1, label = ' 图例文本1 ')

ax.plot(y2, label = ' 图例文本2 ')

plt.legend()

# plt.legend(loc='图例位置 如 upper left')

4.5 图例函数的语法及设置

matplotlib.pyplot.legend(*args, **kwargs)

这个可以整理一下,目前先学会图例与图的对应显示,图例的位置,

整理时参考:

()matplotlib命令与格式:图例legend语法及设置

()Matplotlib 中文用户指南 3.6 图例指南

()python画图matplotlib的Legend(显示图中的标签)

()Legend guide 官方文档

4.5.1 位置信息loc

默认loc属性值为 “ upper right ”

当然用户可以通过int 、string、或pair of float 定义 legend 的位置

=============== =============

Location String Location Code

=============== =============

'best' 0

'upper right' 1

'upper left' 2

'lower left' 3

'lower right' 4

'right' 5

'center left' 6

'center right' 7

'lower center' 8

'upper center' 9

'center' 10

=============== =============

5 在图中增加散点

5.1 基本语法

函数scatter() 是在图中绘制散点图的工具

plt.scatter(x,y[,...])

x, y - 位置坐标点,array_like , shape(n, )

在[ ... ] 中的可选参数,optional

s=None, 散点的半径,scalar or array_like, shape (n, ),

若 s = 10, 表示点的半径均为10

若 s = [1, 10],表示与 (x, y) 对应点坐标的大小

c=None, 颜色标记,默认为为B, sequence, or sequence of color,适用多种(4种)标记方式

zoder = default, 从字面意思可知是Z轴的叠放顺序,值越大,越靠上,没查资料,default值不知道。不过为了好看,可以将其设置大一些。散点位于最上面。

marker=None,

cmap=None,(作用是)映射的关键码。

cmap 仅在 c 为浮点数数组(an array of floats,可以把整数数组当成特殊的浮点数数组,在下面的示例中整数数组也可以使用) 时使用

perceptual uniform sequential colormaps:感知均匀的序列化 colormap

sequential colormaps:序列化(连续化)色图 colormap

gray:0-255 级灰度,0:黑色,1:白色,黑底白字;

gray_r:翻转 gray 的显示,如果 gray 将图像显示为黑底白字,gray_r 会将其显示为白底黑字;

另外还有一种颜色表,在matlab中,imagesc函数绘制彩图时默认的颜色表为 jet (蓝色 --> 红色 ) 。不同的颜色代表高程、振幅等信息,以便于直观分析数据特征。

mabplotlib中的jet与matlab中的jet类似,cmap = ‘jet’,时,小则为蓝,愈大愈红。cmap = ‘jet_r’时则意味数值与对应颜色的反转。

与此对应的取值范围c没有找到,也没有测算出来,当使用np.nan时,该对应点消逝。

注:在下面代码测算时,只要不是np.nan,无论取值大小如何变化,最终的得到的图形颜色(肉眼分辨范围)未改变,初步猜测可能是系统先将值分为进行“端值”匹配对应,然后再等分匹配对应。

参考:colormap中的Jet 颜色倒转、什么是好的颜色表(colormap)?、matplotlib 可视化 —— cmap(colormap)

import numpy as np

import matplotlib.pyplot as plt

# 尽管在此用range与np.linspace等效,

# 但scatter散点函数要求x y的长度一致时,np.linspace的优势就表现出现了,

# 可以直接选择点的个数

# 同时实际用的时候np.linspace的报错率低

# 如在使用range时,x * 2 就会报错。

# TypeError: unsupported operand type(s) for *: 'range' and 'int'

# x = range(1, 100, 2)

x = np.linspace(1,100,50)

y1 = x * 0.25

y2 = x * 0.5

y3 = x * 1

y4 = x * 2

d = np.linspace(1,10000,50)

plt.figure('Scatter', facecolor='lightgray')

plt.title('Scatter', fontsize=20)

plt.xlabel('x', fontsize=14)

plt.ylabel('y', fontsize=14)

plt.tick_params(labelsize=10)

plt.grid(linestyle=':')

plt.scatter(x, y1, s=60, c=d, cmap='jet_r', alpha=0.5)

plt.scatter(x, y2, s=60, c=d, cmap='jet', alpha=0.5)

plt.scatter(x, y3, s=60, c=d, cmap='gray_r', alpha=0.5)

plt.scatter(x, y4, s=60, c=d, cmap='gray', alpha=0.5)

plt.show()

基于matplotlib的数据可视化

norm=None,

vmin=None,

vmax=None,

alpha=None,

linewidths=None,

verts=None,

edgecolors=None,

hold=None,

data=None,

**kwargs

help(plt.scatter)

查看参数可知,其可以设置一个值,表示所有点的属性均统一为该值,也可通过array_like为每一个散点分配属性值。

具体属性值可查看帮助文档,此不枚举细列。

5.2 示例一

mport numpy as np

import matplotlib.pyplot as plt

x = np.linspace(-np.pi*1.5,np.pi*1.5,200)

sin_y = np.sin(x)

cos_y = np.cos(x)

# 计算特殊点的坐标

xo = np.pi * 3 / 4

sin_yo = np.sin(xo)

cos_yo = np.cos(xo)

plt.plot(x, sin_y, linestyle='--', linewidth=1,color='dodgerblue')

plt.plot(x, cos_y, linestyle=':', linewidth=1.2,color='orangered')

# 绘制特殊点

# plot(x,y)绘制一条线,x值[xo,xo],y值[cos_yo,sin_yo],

# 实际上将两个坐标点(xo, cos_yo), (xo, sin_yo)连接起来

plt.plot([xo, xo], [cos_yo, sin_yo],

linestyle='--',color='limegreen')

# 绘制

plt.scatter([xo, xo], [cos_yo, sin_yo],

s=60,edgecolor='limegreen',

facecolor='white',zorder=10)

# 显示图形

plt.show()

基于matplotlib的数据可视化

5.3 示例2

import numpy as np

import matplotlib.pyplot as plt

n = 10000

# 产生均值为0标准差为1区间的n个服从正态分布的随机数

x = np.random.normal(0, 1, n)

y = np.random.normal(0, 1, n)

# 获取颜色的分布对应值

c_color = np.sqrt(x**2 + y**2)

print(d)

plt.figure('Scatter', facecolor='lightgray')

plt.title('Scatter', fontsize=20)

plt.xlabel('x', fontsize=14)

plt.ylabel('y', fontsize=14)

plt.tick_params(labelsize=10)

plt.grid(linestyle=':')

plt.scatter(x, y, s=60, c=c_color, cmap='jet_r', alpha=0.5)

plt.show()

基于matplotlib的数据可视化

6 图中添加注释annotate

对点 xy 进行文本注释

plt.annotate(

'注释文本',字符串str

xy=被注释点的坐标,序列,数组,可迭代对象iterable

xycoords=被注释点的坐标属性,相对位置,有每一个属性值对应位置描述

xytext=注释文本的坐标,若无,则默认xy坐标点

textcoords=注释文本坐标的属性,

fontsize=字体大小,

arrowprops=dict(arrowstyle=箭头形状,connectionstyle=箭头连线的风格)

)

内容较多,可查看帮助文档

import numpy as np

import matplotlib.pyplot as plt

x = np.linspace(-np.pi*1.5,np.pi*1.5,200)

sin_y = np.sin(x)

cos_y = np.cos(x)

# 计算特殊点的坐标

xo = np.pi * 3 / 4

sin_yo = np.sin(xo)

cos_yo = np.cos(xo)

plt.plot(x, sin_y, linestyle='--', linewidth=1,color='dodgerblue')

plt.plot(x, cos_y, linestyle=':', linewidth=1.2,color='orangered')

# 绘制特殊点

# plot(x,y)绘制一条线,x值[xo,xo],y值[cos_yo,sin_yo],

# 实际上将两个坐标点(xo, cos_yo), (xo, sin_yo)连接起来

plt.plot([xo, xo], [cos_yo, sin_yo],

linestyle='--',color='limegreen')

# 绘制

plt.scatter([xo, xo], [cos_yo, sin_yo],

s=60,edgecolor='limegreen',

facecolor='white',zorder=10)

# 添加注释

plt.annotate(

r'$cos(\frac{3\pi}{4})=-\frac{\sqrt{2}}{2}$',

xy=(xo, cos_yo), xycoords='data',

xytext=(-90, -40), textcoords='offset points',

fontsize=14, arrowprops=dict(

arrowstyle='->', connectionstyle='arc3, rad=0.2'))

plt.annotate(

r'$sin(\frac{3\pi}{4})=\frac{\sqrt{2}}{2}$',

xy=(xo, sin_yo), xycoords='data',

xytext=(20, 20), textcoords='offset points',

fontsize=14, arrowprops=dict(

arrowstyle='->', connectionstyle='arc3, rad=0'))

# 显示图形

plt.show()

基于matplotlib的数据可视化

7 实例

生成如下图的代码

基于matplotlib的数据可视化

import numpy as np

import matplotlib.pyplot as plt

# 生成曲线上各个点的x,y坐标,然后用一段段直线连起来

x = np.linspace(-np.pi, np.pi, 200) # 产生一个等差数列

cos_y = np.cos(x) / 2

sin_y = np.sin(x)

# 计算特殊点的坐标

xo = np.pi * 3 / 4

yo_cos = np.cos(xo) / 2

yo_sin = np.sin(xo)

# 设置坐标范围

plt.xlim(x.min() * 1.1, x.max() * 1.1)

plt.ylim(min(cos_y.min(), sin_y.min()) * 1.1,

max(cos_y.max(), sin_y.max()) * 1.1)

# 设置坐标轴刻度标签

plt.xticks([-np.pi, -np.pi / 2, 0, np.pi / 2, np.pi * 3 / 4, np.pi],

[r'$-\pi$', r'$-\frac{\pi}{2}$', r'0',

r'$\frac{\pi}{2}$', r'$\frac{3\pi}{4}$', r'$\pi$'])

# plt.yticks([])

plt.yticks([-1, -0.5, 0.5, 1])

# 将矩形坐标轴改成十字坐标轴:

# 获取当前坐标轴对象

ax = plt.gca() # get current axis

# 将垂直坐标刻度置于左边框

ax.yaxis.set_ticks_position('left')

# 将左边框置于数据坐标原点

ax.spines['left'].set_position(('data', 0))

# 将水平坐标刻度置于底边框

ax.xaxis.set_ticks_position('bottom')

# 将底边框置于数据坐标原点

ax.spines['bottom'].set_position(('data', 0))

# 将右边框和顶边框设置成无色

ax.spines['right'].set_color('none')

ax.spines['top'].set_color('none')

# 用直线连接曲线上各点

plt.plot(x, cos_y, linestyle='--', linewidth=1,

color='dodgerblue', label=r'$y=\frac{1}{2}cos(x)$')

plt.plot(x, sin_y, linestyle=':', linewidth=1.2,

color='orangered', label=r'$y=sin(x)$')

# 绘制特殊点

plt.plot([xo, xo], [yo_cos, yo_sin], linestyle='--',

linewidth=1, color='limegreen')

plt.scatter([xo, xo], [yo_cos, yo_sin], s=60,

edgecolor='limegreen', facecolor='white',

zorder=3)

# 添加注释

plt.annotate(

r'$\frac{1}{2}cos(\frac{3\pi}{4})=-\frac{\sqrt{2}}{2}$',

xy=(xo, yo_cos), xycoords='data',

xytext=(-90, -40), textcoords='offset points',

fontsize=14, arrowprops=dict(

arrowstyle='->', connectionstyle='arc3, rad=0.2'))

plt.annotate(

r'$sin(\frac{3\pi}{4})=\frac{\sqrt{2}}{2}$',

xy=(xo, yo_sin), xycoords='data',

xytext=(20, 20), textcoords='offset points',

fontsize=14, arrowprops=dict(

arrowstyle='->', connectionstyle='arc3, rad=0'))

plt.legend(loc='upper left')

# 显示图形

plt.show()

基于matplotlib的数据可视化


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Cypherpunks

Cypherpunks

Julian Assange、Jacob Appelbaum、Andy Müller-Maguhn、Jérémie Zimmermann / OR Books / 2012-11 / GBP 8.99

Cypherpunks are activists who advocate the widespread use of strong cryptography (writing in code) as a route to progressive change. Julian Assange, the editor-in-chief of and visionary behind WikiLea......一起来看看 《Cypherpunks》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具