pcolor是Python中一种适用于二维数组可视化的函数,可以根据提供的数据矩阵自动着色,并将结果可视化到一个坐标系中,用于显示数组中的数据分布。pcolor用法逐步介绍。
一、从pcolor改色膜
改色膜意味着改变着色方式,比如从默认的jet改变成其他颜色。使用colormap参数可以改变pcolor的颜色映射。matplotlib中有很多预定义的配色方案,包括:viridis(紫草)、plasma(血浆)、inferno(地狱)、magma(岩浆)和cividis(城市)等。
import matplotlib.pyplot as plt import numpy as np # 生成随机数据 data_array = np.random.random((10,10)) # 绘制默认颜色矩阵 plt.subplot(121) plt.pcolor(data_array) # 绘制改色之后的颜色矩阵 plt.subplot(122) plt.pcolor(data_array, cmap=plt.cm.viridis) plt.show()
上述代码中,我们首先生成了一个随机的10x10二维数组的数据,然后使用subplot将两个图像放在同一个窗口中便于比较。第一个图使用了默认的颜色映射jet,第二个图使用了viridis。
二、color函数怎么用
color函数是定义颜色映射关系的函数,可以将标量值映射为颜色值。现在可以在pcolor中使用color函数来自定义颜色映射。
import matplotlib.pyplot as plt import numpy as np # 自定义颜色映射 def mymap(x): r = (x-0.5)*2 g = (0.5-x)*2 b = 0 return (r,g,b) # 生成随机数据 data_array = np.random.random((10,10)) # 绘制自定义颜色映射的颜色矩阵 plt.pcolor(data_array, cmap=mymap) plt.show()
代码中我们使用了名为mymap的自定义色彩映射函数。
三、pcolormesh颜色
pcolor和pcolormesh最大的区别在于,pcolormesh参数需要读入坐标轴数组,pcolor则不需要。下面我们看一下如何使用pcolormesh。
import matplotlib.pyplot as plt import numpy as np # 生成坐标轴数组 x = np.arange(11) y = np.arange(11) # 生成随机2D数据 data_array = np.random.random((10,10)) # 绘制颜色矩阵 plt.pcolormesh(x,y,data_array) plt.show()
代码中,我们调用pcolormesh函数时,将 x轴和 y轴的数组一起传入。pcolor函数则无需传入坐标轴数组,因此在坐标系绘制上具有更大的灵活性。
四、pcolor矩阵维度不一致
当数据矩阵维度不一致时,可以使用masked数组将需要被隐藏的部分替换为NaN来创造矩阵的不规则形状。这样可以更精细的绘制颜色矩阵。
import matplotlib.pyplot as plt import numpy as np # 生成数据矩阵 data_array = np.random.random((10,10)) data_array[3,4:6] = np.nan data_array[4,3:7] = np.nan # 创建表示mask数据是否存在的矩阵 masked_array = np.ma.masked_where(np.isnan(data_array), data_array) # 绘制mask矩阵 plt.pcolor(masked_array, cmap=plt.cm.viridis) plt.show()
在这个例子中,我们使用了numpy模块中的函数,将需要被隐藏的值替换成了NaN。然后我们使用ma模块的masked_where函数创建了一个表示mask数据是否存在的矩阵。最后将masked_array传递给pcolor函数,从而绘制出颜色矩阵。
五、pcolor颜色数据输入必须为矩阵
在使用时,需要保证输入的颜色数据为矩阵类型,在实践中常常会遇到数据不是矩阵的情况。这种情况下需要对数据进行重组或者转置。下面是一些处理方法。
import matplotlib.pyplot as plt import numpy as np # 生成数组数据 x = np.linspace(0, 10, 20) y = np.linspace(0, 10, 10) X,Y = np.meshgrid(x,y) data_array = X**3 - 10*Y**2 # 用ravel()函数将data_array转化为向量 x = np.linspace(0, 10, 20) y = np.linspace(0, 10, 10) X,Y = np.meshgrid(x,y) data_array = X**3 - 10*Y**2 # 将data_array转化为二维矩阵形式 z = np.reshape(data_array, (10,20)).T # 绘制矩阵形式的颜色矩阵 plt.pcolor(z, cmap=plt.cm.viridis) plt.show()
上述例子中数据为一维数组,我们使用numpy的reshap函数重组数据为矩阵形式,或者使用numpy的meshgrid函数将一维数组重组为二维矩阵形式。经过重组或者转制后的数据可以传递给pcolor函数,绘制颜色矩阵。
六、color函数用法
color函数是matplotlib中定义颜色的函数,可用于设置图像、曲线、文本等要素的颜色。color参数可以为多种类型,例如颜色名称,RGB颜色值,还可以使用HTML颜色字符串等。更多关于color函数的用法请参考matplotlib官方文档。
import matplotlib.pyplot as plt import numpy as np x = np.linspace(0,np.pi*2,100) y = np.sin(x) plt.plot(x,y,color='red') # 设置线条颜色为红色 plt.show()
代码中我们使用color参数将折线图的线条颜色设置为红色。color函数可以接受一系列字符串和元组类型的颜色值,还可以使用HTML颜色字符串和连续色彩条。关于color函数的各种参数请参考官方文档。
七、color与colour的区别
color和colour其实是个单词拼写的差别。英式英语中常用的是colour,而美式英语中则常用color。Python使用的是美式英语,因此我们在编写代码时应该使用color。
总结
绘制颜色矩阵是我们在处理数据可视化时经常用到的一种方法,pcolor是Python中绘制颜色矩阵最常见的函数之一。通过学习本文中的例子,读者可以逐步掌握pcolor的基本用法和相关技巧。