python绘制格网图显示格网,并把nan值设为黑色
时间: 2024-01-18 20:02:20 浏览: 153
你可以使用 matplotlib 库绘制格网图,并使用 numpy 中的 `numpy.ma.masked_invalid()` 方法将 NaN 值设置为黑色。示例代码如下:
```python
import numpy as np
import matplotlib.pyplot as plt
# 创建示例数据
data = np.random.rand(10, 10)
data[3, 5] = np.nan
# 绘制格网图
fig, ax = plt.subplots()
im = ax.imshow(data, cmap='gray')
# 显示格网
ax.set_xticks(np.arange(-.5, 10, 1))
ax.set_yticks(np.arange(-.5, 10, 1))
ax.grid(color='white', linewidth=2)
# 将 NaN 值设置为黑色
data = np.ma.masked_invalid(data)
im.set_array(data)
# 显示图像
plt.show()
```
以上代码中,`np.ma.masked_invalid()` 方法可以将 NaN 值设置为遮罩值,然后通过 `imshow()` 方法将遮罩值设置为黑色。使用 `grid()` 方法可以显示格网线,其中 `color` 参数指定线的颜色,`linewidth` 参数指定线的宽度。
相关问题
python写:读取表格数据,显示为180*360的格网图,将nan值设为黑色
好的,您可以尝试以下代码实现您的需求:
```python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 读取表格数据
df = pd.read_excel('your_file_path.xlsx')
# 将nan值设为0,方便后面绘图
df = df.fillna(0)
# 转换为numpy数组
data = df.to_numpy()
# 设定黑色为nan值的颜色
cmap = plt.get_cmap('gist_gray')
cmap.set_bad(color='black')
# 绘制格网图
plt.imshow(data, cmap=cmap, interpolation='nearest')
plt.colorbar()
# 设定横纵坐标
plt.xticks(np.arange(0, 360, 30))
plt.yticks(np.arange(0, 180, 30))
# 显示图像
plt.show()
```
需要注意的是,您需要将`your_file_path.xlsx`替换为您自己的表格文件路径。如果您的表格文件不是`.xlsx`格式,则需要相应地修改`read_excel`函数的参数。
python将数组按数据大小画出格网图,并且将数组中的nan值在不替换的情况下显示为黑色
可以使用matplotlib库来实现这个功能。下面是代码示例:
```python
import numpy as np
import matplotlib.pyplot as plt
# 构造数据
data = np.random.rand(10, 10)
data[3][5] = np.nan
# 绘制格网图
fig, ax = plt.subplots()
im = ax.imshow(data, cmap='YlOrRd')
# 设置颜色映射范围
vmin = np.nanmin(data)
vmax = np.nanmax(data)
im.set_clim(vmin, vmax)
# 显示颜色条
cbar = ax.figure.colorbar(im, ax=ax)
# 将nan值显示为黑色
cmap = im.get_cmap()
cmap.set_bad(color='black')
# 设置坐标轴
ax.set_xticks(np.arange(data.shape[1]))
ax.set_yticks(np.arange(data.shape[0]))
ax.set_xticklabels(np.arange(data.shape[1])+1)
ax.set_yticklabels(np.arange(data.shape[0])+1)
ax.tick_params(top=True, bottom=False, labeltop=True, labelbottom=False)
# 在每个格子中显示数值
for i in range(data.shape[0]):
for j in range(data.shape[1]):
text = ax.text(j, i, round(data[i, j],2), ha="center", va="center", color="w")
# 设置图像标题
ax.set_title("Array Grid Plot")
# 显示图像
plt.show()
```
这段代码会生成一个10x10的随机数组,并且将其中一个元素置为nan。然后,它会绘制这个数组的格网图,并将nan值显示为黑色。最后,它会在每个格子中显示数值,并设置图像标题。你可以根据自己的需求修改代码中的参数。
阅读全文