更改投影的 Matplotlib 轴的背景颜色
Change the background colour of a projected Matplotlib axis
我正在尝试使用 Cartopy 创建一个图形,它需要在未投影的轴上绘制投影轴。
这是一个尽可能简单的代码版本,它用坐标轴上的内容替换背景颜色:
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
#Setup figure
fig = plt.figure()
#Unprojected axis
ax1 = fig.add_subplot(111, axisbg='b')
#Projected axis
ax2 = fig.add_subplot(111, axisbg='None', projection=ccrs.Mercator())
plt.show()
这不是让蓝轴可见,而是产生了这个:
从上面的代码中删除 projection=ccrs.Mercator()
参数会产生以下预期结果:
如何使投影轴背景透明?
谢谢!
编辑:
我试过这些其他设置背景透明的方法,但没有成功:
ax2 = fig.add_subplot(111, axisbg='None', alpha=0, projection=ccrs.Mercator())
ax2.patch.set_facecolor('none')
ax2.patch.set_alpha(0)
Cartopy在控制一些东西方面还不是很全面,恐怕你需要深入研究代码才能找到一些东西。
我认为您需要的基本调整是:
ax2.background_patch.set_fill(False)
我的破解示例:
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
fig = plt.figure()
ax1 = fig.add_subplot(111, axisbg='b')
ax2 = fig.add_subplot(111, axisbg='None', projection=ccrs.Mercator())
ax2.background_patch.set_fill(False)
ax2.add_feature(cartopy.feature.LAND)
ax2.coastlines(color='red', linewidth=0.75)
plt.show()
图片:
编辑:删除了copy/paste错误
HTH
帕特里克
您可以使用 imshow()
将图像投影到地图的背景上。为此,Cartopy 使用 stock_img()
方法。
您还可以通过使用 NumPy 创建 2x2 像素图像并将其投影到整个地图范围来获得纯色背景:
import numpy as np
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
from cartopy.feature import LAND
ax = plt.axes(projection=ccrs.PlateCarree())
# Set RGB value to ocean colour
ax.imshow(np.tile(np.array([[[200, 200, 255]]],
dtype=np.uint8), [2, 2, 1]),
origin='upper',
transform=ccrs.PlateCarree(),
extent=[-180, 180, -90, 90])
ax.add_feature(LAND)
ax.coastlines()
plt.show()
我正在尝试使用 Cartopy 创建一个图形,它需要在未投影的轴上绘制投影轴。
这是一个尽可能简单的代码版本,它用坐标轴上的内容替换背景颜色:
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
#Setup figure
fig = plt.figure()
#Unprojected axis
ax1 = fig.add_subplot(111, axisbg='b')
#Projected axis
ax2 = fig.add_subplot(111, axisbg='None', projection=ccrs.Mercator())
plt.show()
这不是让蓝轴可见,而是产生了这个:
projection=ccrs.Mercator()
参数会产生以下预期结果:
如何使投影轴背景透明?
谢谢!
编辑: 我试过这些其他设置背景透明的方法,但没有成功:
ax2 = fig.add_subplot(111, axisbg='None', alpha=0, projection=ccrs.Mercator())
ax2.patch.set_facecolor('none')
ax2.patch.set_alpha(0)
Cartopy在控制一些东西方面还不是很全面,恐怕你需要深入研究代码才能找到一些东西。
我认为您需要的基本调整是:
ax2.background_patch.set_fill(False)
我的破解示例:
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
fig = plt.figure()
ax1 = fig.add_subplot(111, axisbg='b')
ax2 = fig.add_subplot(111, axisbg='None', projection=ccrs.Mercator())
ax2.background_patch.set_fill(False)
ax2.add_feature(cartopy.feature.LAND)
ax2.coastlines(color='red', linewidth=0.75)
plt.show()
图片:
编辑:删除了copy/paste错误
HTH
帕特里克
您可以使用 imshow()
将图像投影到地图的背景上。为此,Cartopy 使用 stock_img()
方法。
您还可以通过使用 NumPy 创建 2x2 像素图像并将其投影到整个地图范围来获得纯色背景:
import numpy as np
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
from cartopy.feature import LAND
ax = plt.axes(projection=ccrs.PlateCarree())
# Set RGB value to ocean colour
ax.imshow(np.tile(np.array([[[200, 200, 255]]],
dtype=np.uint8), [2, 2, 1]),
origin='upper',
transform=ccrs.PlateCarree(),
extent=[-180, 180, -90, 90])
ax.add_feature(LAND)
ax.coastlines()
plt.show()