如何解决是否可以在matplotlib的pcolormesh图中保留空白?
我正在python中使用matplotlib.pyplot.pcolormesh
显示一些数据,我想在缺少数据点的地方留空白。
假设我收集了x
值0到10和y值0到10的数据,但不是每个这样的值。目前,我使用np.zeros((11,11))
初始化数据存储阵列,然后使用for
循环将该阵列的值更改为数据值(如果我有该点的数据)。
这给我留下了一堆数据以及数组中的一些零。当我绘制此图时,无法区分没有数据的点和具有小值的数据的点。
是否有可能使丢失的数据点与非丢失的数据点明显不同?例如,在下面的代码中,我希望(3,1)
,(5,7)
和(8,8)
处的正方形是彩色的,而其余正方形是白色的。
我也尝试过使用np.empty((11,11))
和np.full((11,11),np.nan)
初始化数据存储阵列,但是它们都产生与np.zeros
相同的输出。这是下面的代码:
import numpy as np
import matplotlib.pyplot as plt
data_storage = np.zeros((11,11))
collected_data = [[3,1,45.2],[5,7,23.9],[8,8,78.4]
for data in collected_data:
x_coord = data[0]
y_coord = data[1]
value = data[2]
data_storage[y_coord,x_coord] = value
all_x_values = np.linspace(0,10,11)
all_y_values = np.linspace(0,11)
plt.pcolormesh(all_x_values,all_y_values,data_storage)
plt.show()
解决方法
一种方法是将所有零更改为NaN
,这将使相应的单元格透明。
请注意,pcolormesh
的x和y值用于栅格点,而不用于中心,因此您在每个维度上还需要一个值(11个单元格,12个单元格边框)。这允许创建具有不相等像元大小的颜色网格。如果您希望刻度线很好地位于单元格的中心,则可以将单元格的边界放在一半处。
(在for
循环下面的代码中编写得更为简洁)。
import numpy as np
import matplotlib.pyplot as plt
data_storage = np.zeros((11,11))
collected_data = [[3,1,45.2],[5,7,23.9],[8,8,78.4]]
for x_coord,y_coord,value in collected_data:
data_storage[y_coord,x_coord] = value
all_x_values = np.arange(0,12) - 0.5
all_y_values = np.arange(0,12) - 0.5
plt.pcolormesh(all_x_values,all_y_values,np.where(data_storage == 0,np.nan,data_storage))
plt.gca().xaxis.set_major_locator(MultipleLocator(1))
plt.gca().yaxis.set_major_locator(MultipleLocator(1))
plt.colorbar()
plt.show()
另一种方法是创建一个颜色图,设置一个'under' color并将vmin
设置为一个稍微大于0的值。可选地,可以在颜色栏中使用{ {1}}。
extend='min'
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。