目录
安装visdom
开始图标->右键->Windows终端
pip install visdom
启动visdom
python -m visdom.server
1.一旦启动服务器,就可以通过在浏览器中输入 http://localhost:8097 来
访问 Visdom,localhost 可以换成 Visdom 服务的托管地址。
2.打开python编辑程序
可视化接口
vis.text:文本
vis.image:图片
vis.scatter:2D 或 3D 散点图
vis.line:线图
vis.stem:茎叶图
vis.heatmap:热力图
vis.bar:条形图
vis.histogram:直方图
vis.boxplot:箱型图
vis.surf:表面图
vis.contour:轮廓图
vis.mesh:网格图
vis.svg:SVG 图像
以下代码所有的导入的库
import numpy as np
from visdom import Visdom
vis = Visdom()
#这行代码创建了一个 Visdom 的实例,Visdom是类
#用于与 Visdom 服务器进行通信。
vis.text:文本
#打印文本
vis.text('Hello')
vis.image:图片
#图片
vis.images(
np.random.rand(3,256,256),
opts=dict(title='picture',caption='图片标题1')
)
#生成一个随机的 3 通道、256x256 大小的图片数组。
#opts 参数用于设置标题和图片的标题。
vis.images(
np.random.randn(20,3,64,64),
opts=dict(title='网格图像',caption='2')
)
vis.scatter:2D 或 3D 散点图
#point
vis.scatter(
X=np.random.rand(255,2),
#在 [0, 1) 范围内均匀分布的随机数
Y=(np.random.randn(255)>0)+1,
#大于 0 的元素被标记为 2,而小于等于 0 的元素被标记为 1
opts=dict(
markersize=10,#markersize 参数设置了散点的大小为 10
markercolor=np.floor(np.random.random((2,3)) * 255),
#markercolor 参数用于设置每个散点的颜色。
#这里的 markercolor 是一个形状为 (2, 3) 的 NumPy 数组,
#它通过取 [0, 1) 范围内的随机数并乘以 255,
#再向下取整得到一个 0 到 255 之间的整数。
#这个数组中的每一行代表一种类别的散点颜色。
legend=['Men','Women']#文字说明
),
)
vis.line:线图
#线图 line
Y = np.linspace(-5,5,100)
#从-5到5,共100个元素的数组
#np.linspace(-5, 5, 100)会生成一个从-5到5的一维数组,
#这个数组包含100个等距离的元素。
#这意味着数组的第一个元素是-5,最后一个元素是5,
#而其余98个元素在这个范围内均匀分布。
#最终,变量Y被赋值为这个包含100个元素的一维数组。
vis.line(
Y=np.column_stack((Y*Y,np.sqrt(Y+5))),
X=np.column_stack((Y,Y)),
#Y数组的元素分别平方和开方,
#并使用NumPy的column_stack()函数将它们堆叠在一起,形成一个二维数组。
#该二维数组用作折线图中的Y值。
#接下来,X数组的元素是Y数组的两个副本,
#同样使用column_stack()函数将它们堆叠在一起,形成一个二维数组。
#该二维数组用作折线图中的X值。
#也就是画出y=x*x和y=sqrt(x+5)的图像
opts=dict(markers=False)
)
#opts参数设置了柱状图的选项,其中markers=False表示在柱状图中不显示标记。
#默认情况下,stem()函数会在柱状图的每个数据点上显示一个标记符号。
#但是,通过将markers设置为False,可以禁用这个功能,使柱状图不显示标记符号。
#通过将opts=dict(markers=False)作为参数传递给vis.stem()函数,
#柱状图将被创建,并且不会在每个数据点上显示标记符号。
vis.stem:茎叶图/柱状图
#柱状图 stem
Y=np.linspace(0,2*math.pi,70)
#Y数组使用NumPy的linspace()函数生成了
#一个从0到2π的等间距的70个元素的数组。
X=np.column_stack((np.sin(Y),np.cos(Y)))
#X数组是Y数组中每个元素的正弦值和余弦值,使用NumPy的sin()和cos()函数计算得到。
#然后,使用column_stack()函数将它们堆叠在一起,形成一个二维数组。
#该二维数组用作柱状图中的X值。
vis.stem(
X=X,
Y=Y,
opts=dict(legend=['Sin','Cos'])
)
vis.heatmap:热力图
#热力图 heatmap
vis.heatmap(
X=np.outer(np.arange(1,6),np.arange(1,11)),
#np.arange(1,6)会生成一个从1到5的一维数组,即[1, 2, 3, 4, 5]。
#np.arange(1,11)会生成一个从1到10的一维数组,
#即[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]。
#np.outer(np.arange(1,6),np.arange(1,11))会将这两个一维数组
#作为参数传递给np.outer()函数,
#该函数返回这两个数组的外积(outer product),也就是一个二维数组。
#最终,变量X将被赋值为一个大小为5x10的二维数组,其中每个元素的值是对应位置上两个一维数组元素的乘积。
#[[ 1 2 3 4 5 6 7 8 9 10]
#[ 2 4 6 8 10 12 14 16 18 20]
#[ 3 6 9 12 15 18 21 24 27 30]
#[ 4 8 12 16 20 24 28 32 36 40]
#[ 5 10 15 20 25 30 35 40 45 50]]
opts=dict(
columnnames=['a','b','c','d','e','f','g','h','i','j'],#行标签
rownames=['y1','y2','y3','y4','y5'],#列标签
colormap='Electric',
#colormap='Electric'指定了柱状图的颜色映射为'Electric'
#'Electric'是一种预定义的颜色映射,
#它使用明亮的、富有对比的颜色,以便清晰地表示数据之间的差异。
)
)
vis.bar:条形图
vis.bar(
X=np.random.rand(20)
)
#堆叠
vis.bar(
X=np.abs(np.random.rand(5,3)),
opts=dict(
stacked=True,#stacked=True,堆叠
legend=['Sina','163','AliBaBa'],
rownames=['2013','2014','2015','2016','2017']
)
)
#分组条形图
vis.bar(
X=np.random.rand(10,3),
opts=dict(
stacked=True,
#stacked=False:表示条形图不堆叠,每个类别的条形将并排显示
legend=['A','B','C']
)
)
vis.histogram:直方图
#直方图 histogram
vis.histogram(
X=np.random.rand(10000),
opts=dict(numbins=20)
#numbins参数用于指定柱状图中的柱子数量。
#通过将numbins设置为20,您将创建一个具有20个柱子的柱状图。
)
vis.boxplot:箱型图
#箱型图 boxplot
X=np.random.rand(100,2)
X[:,1]+=2#X[:,1]+=2 将数组的第二列的所有元素增加 2。
vis.boxplot(
X=X,
opts=dict(legend=['Men','Women'])
)
vis.surf:表面图
#三维表面图 surf
x=np.tile(np.arange(1,101),(100,1))
#tile函数主要的功能是重复某个数组。
#arange 从1到100步长为1
#tile把这个数组复制的结果为100行1列的a数组
y=x.transpose()
#x.transpose() 函数会将数组 x 的行变为列,将列变为行。
X=np.exp((((x-50)**2)+((y-50)**2))/-(20.0**2))
#X=x**2/4+y**2/2
vis.surf(
X=X,
opts=dict(colormap='Hot')
#通过将colormap设置为'Hot',您将使用热图颜色映射来渲染柱状图。
#热图颜色映射通常用于将数据映射到从低到高的渐变颜色中
)
vis.contour:轮廓图
#轮廓图 contour
vis.contour(
X=X,
opts=dict(colormap='Viridis')
#维吉尼亚州颜色映射通常用于将数据映射到从低到高的渐变颜色中
)
vis.mesh:网格图
#网格图 mesh
# mesh plot
x = [0, 0, 1, 1, 0, 0, 1, 1]
y = [0, 1, 1, 0, 0, 1, 1, 0]
z = [0, 0, 0, 0, 1, 1, 1, 1]
X = np.c_[x, y, z]
print(X)
#np.c_函数来将x,y和z三个数组按列合并成一个新的数组X
#按列叠加两个矩阵,要求行数相等
i = [7, 0, 0, 0, 4, 4, 6, 6, 4, 0, 3, 2]
j = [3, 4, 1, 2, 5, 6, 5, 2, 0, 1, 6, 3]
k = [0, 7, 2, 3, 6, 7, 1, 1, 5, 5, 7, 6]
Y = np.c_[i, j, k]
#[[7 3 0]
#[0 4 7]
#[0 1 2]
#[0 2 3]
#[4 5 6]
#[4 6 7]
#[6 5 1]
#[6 2 1]
#[4 0 5]
#[0 1 5]
#[3 6 7]
#[2 3 6]]
vis.mesh(X=X, Y=Y, opts=dict(opacity=0.5))
#opacity 透明度
vis.svg:SVG 图像
#svg对象
svgstr = """
<svg height="300" width="300">
<ellipse cx="80" cy="80" rx="50" ry="30"
style="fill:blue;stroke:purple;stroke-width:2" />
</svg>
"""
#SVG图像的字符串表示。它描述了一个椭圆形(ellipse)元素,
#位置位于(cx, cy) = (80, 80),x轴半径(rx)为50,y轴半径(ry)为30。
#椭圆形使用了红色填充(fill:red),
#紫色边框(stroke:purple)和2像素的边框宽度(stroke-width:2)。
vis.svg(
svgstr=svgstr,
opts=dict(title='SVG图像')
)