Matplotlib 如何使用geodataframe中的第一行在地物上创建文本框?

Matplotlib 如何使用geodataframe中的第一行在地物上创建文本框?,matplotlib,cartopy,Matplotlib,Cartopy,我想在一个图上画一个文本框,显示一个热带气旋的5天NHC预报锥,在这个例子中是飓风多利安。我有四个形状文件(轨迹线、圆锥体、点和手表/警告)。在图中,我想显示第一行点的以下内容(图中的黄色圆圈;代码底部附近的两条注释线是我最初尝试的): 最新跟踪信息:(常规字符串;下面是来自点的变量) 横向长度 MAXWIND 阵风 MSLP TCSPD 这将有助于了解您遇到了什么错误,或者什么不符合您的要求。我可以稍微调整您的代码,以实现以下目标: import cartopy.crs as ccrs i

我想在一个图上画一个文本框,显示一个热带气旋的5天NHC预报锥,在这个例子中是飓风多利安。我有四个形状文件(轨迹线、圆锥体、点和手表/警告)。在图中,我想显示第一行点的以下内容(图中的黄色圆圈;代码底部附近的两条注释线是我最初尝试的):

最新跟踪信息:(常规字符串;下面是来自点的变量)
横向长度
MAXWIND
阵风
MSLP
TCSPD


这将有助于了解您遇到了什么错误,或者什么不符合您的要求。我可以稍微调整您的代码,以实现以下目标:

import cartopy.crs as ccrs
import matplotlib.pyplot as plt

fig = plt.figure(figsize=(14,12))
fig.set_facecolor('white')
ax = plt.subplot(1,1,1, projection=ccrs.LambertConformal())

plt.title('Storm Advisory', fontsize=14, fontweight='bold')

points_gds = pd.DataFrame(dict(GUST=[165.0], LAT=[26.8],
                          LON=[-78.3], MSLP=[930.2]))

storminfo = f'''Max Wind Gusts: {points_gds.iloc[0]['GUST']:.0f} mph
Current Latitude: {points_gds.iloc[0]['LAT']:.1f}
Current Longitude: {points_gds.iloc[0]['LON']:.1f}
Central Pressure: {points_gds.iloc[0]['MSLP']:.2f} mb'''

props = dict(boxstyle='round', facecolor='wheat', alpha=0.5)
plt.text(0.05, 0.95, 'Testing', transform=ax.transAxes, va='top', bbox=props)

ax.coastlines()
ax.set_extent([-88,-70,25,50])
这将生成此图像:


为了实现这一点,我需要将
round
(这是一个Python内置函数)更改为字符串
'round'
。文本使用(“格式化字符串文字”)进行格式化,并作为三引号字符串括起来,以避免需要手动输入换行符(
'\n'
)。可以告诉您更多有关如何控制单个项目的格式设置的信息。

了解您遇到的错误或您希望的错误。我可以稍微调整您的代码,以实现以下目标:

import cartopy.crs as ccrs
import matplotlib.pyplot as plt

fig = plt.figure(figsize=(14,12))
fig.set_facecolor('white')
ax = plt.subplot(1,1,1, projection=ccrs.LambertConformal())

plt.title('Storm Advisory', fontsize=14, fontweight='bold')

points_gds = pd.DataFrame(dict(GUST=[165.0], LAT=[26.8],
                          LON=[-78.3], MSLP=[930.2]))

storminfo = f'''Max Wind Gusts: {points_gds.iloc[0]['GUST']:.0f} mph
Current Latitude: {points_gds.iloc[0]['LAT']:.1f}
Current Longitude: {points_gds.iloc[0]['LON']:.1f}
Central Pressure: {points_gds.iloc[0]['MSLP']:.2f} mb'''

props = dict(boxstyle='round', facecolor='wheat', alpha=0.5)
plt.text(0.05, 0.95, 'Testing', transform=ax.transAxes, va='top', bbox=props)

ax.coastlines()
ax.set_extent([-88,-70,25,50])
这将生成此图像:


为了实现这一点,我需要将
round
(这是一个Python内置函数)更改为字符串
'round'
。文本使用(“格式化字符串文字”)进行格式化,并作为三引号字符串括起来,以避免需要手动输入换行符(
'\n'
)。可以告诉您有关如何控制单个项目格式的更多信息。

您的问题是,让所有文本打印还是打印文本?实际上两者都有。代码末尾的两行注释掉了,这是我试图在左上角显示一个文本框。我也想不出最好的方法来绘制我想要的所有文本你的问题是什么,让所有的文本来绘制还是绘制文本?实际上两者都有。代码末尾的两行注释掉了,这是我试图在左上角显示一个文本框。我也找不出最好的方法来绘制我想要的所有文本。未放置“”阻止了文本框的显示。我想从第0行的点_gdf(如LAT、LON、MAXWIND、GUST和TCSPD)中提取某些值,并在文本框中绘制它们,而不是“testing”。我只是不知道从文本框中取出这些值并将它们格式化为新行的最佳方法。我更新了上面的示例,以展示如何将一些示例数据格式化为多行字符串。谢谢。未放置“”阻止了文本框的显示。我想从第0行的点_gdf(如LAT、LON、MAXWIND、GUST和TCSPD)中提取某些值,并在文本框中绘制它们,而不是“testing”。我只是不知道如何将这些值提取出来,并将它们格式化为文本框中的新行。我更新了上面的示例,以展示如何将一些示例数据格式化为多行字符串。