matplotlib如何在地图上插入图片
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matplotlib如何在地图上插入图片相关的知识,希望对你有一定的参考价值。
参考技术A首先,需要初始化一张画布figure,画布上面会有一个坐标系axes,我们最终的图形就是在这个坐标系上进行绘制的。同时,每一个坐标系上绘制的每一个图形,还有一个坐标轴
大
我们先导入matplotlib库。
import matplotlib.pyplot as plt
2)图形不添加任何颜色
plt.figure(figsize=(4,4.5))x = [1,2,3]y = [2,4,6]plt.plot(x,y)plt.show()
结果如下:
3)给画布figure添加背景色
# 为画布设置一个背景fig = plt.figure(figsize=(4,4.5))# set_facecolor用于设置背景颜色fig.patch.set_facecolor('red')# set_alpha用于指定透明度fig.patch.set_alpha(0.6)x = [1,2,3]y = [2,4,6]plt.plot(x,y)plt.show()
结果如下:
4)给坐标系也添加背景色
# 为画布设置一个背景fig = plt.figure(figsize=(4,4.5))fig.patch.set_facecolor('red')fig.patch.set_alpha(0.6)# 为坐标系设置一个背景ax = fig.add_subplot(111)ax.patch.set_facecolor('yellow')ax.patch.set_alpha(1)x = [1,2,3]y = [2,4,6]plt.plot(x,y)plt.show()
结果如下:
5)给坐标系添加“自定义背景”
这个地方需要注意的一点就是:imshow的extent参数设置,注意要和你的绘图坐标轴刻度相一致。
img = plt.imread("哆啦A梦.jpg")fig,ax = plt.subplots()ax.imshow(img,extent=[1, 10, 2, 11])x = [1,2,3,4,5,6,7,8,9,10]y = [2,3,4,5,6,7,8,9,10,11]plt.plot(x,y,c="red")plt.show()
结果如下:
如何在 matplotlib 的地图中插入比例尺
【中文标题】如何在 matplotlib 的地图中插入比例尺【英文标题】:How to insert scale bar in a map in matplotlib 【发布时间】:2017-02-08 17:57:29 【问题描述】:关于如何在 matplotlib 中的地图中插入显示长度比例的比例尺的任何想法?类似于我附上的那个。
或者也许有关于自动测量和显示距离的任何想法(而不是绘制箭头并手动写入距离!)?
谢谢:)
【问题讨论】:
也可以看到这个问题:Is there a convenient way to add a scale indicator to a plot in matplotlib? 【参考方案1】:matplotlib 中有一个已经存在的比例尺类,名为 AnchoredSizeBar。在下面的示例中,AnchoredSizeBar 用于将比例尺添加到图像(或映射到 100x100 米的随机区域)。
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1.anchored_artists import AnchoredSizeBar
import matplotlib.font_manager as fm
fontprops = fm.FontProperties(size=18)
fig, ax = plt.subplots()
ax.imshow(np.random.random((10,10)),extent=[0,100,0,100])
Extent 定义图像水平和垂直值的最大值和最小值。
scalebar = AnchoredSizeBar(ax.transData,
20, '20 m', 'lower center',
pad=0.1,
color='white',
frameon=False,
size_vertical=1,
fontproperties=fontprops)
ax.add_artist(scalebar)
AnchoredSizeBar 的前四个参数是坐标系的变换对象、比例尺长度、标签和位置。进一步的可选参数会改变布局。这些在文档中进行了解释。
ax.set_yticks([])
ax.set_xticks([])
这给了
【讨论】:
【参考方案2】:我会尝试matplotlib-scalebar
包。 (例如您的示例 c。)
假设您正在绘制带有imshow
或类似名称的地图图像,并且您知道像素宽度/单元格大小(地图图像上一个像素的实际等效大小),您可以自动创建比例尺:
这个例子直接来自PyPi matplotlib-scalebar package page,但为了完整起见:
import matplotlib.pyplot as plt
import matplotlib.cbook as cbook
from matplotlib_scalebar.scalebar import ScaleBar
plt.figure()
image = plt.imread(cbook.get_sample_data('grace_hopper.png'))
plt.imshow(image)
scalebar = ScaleBar(0.2) # 1 pixel = 0.2 meter
plt.gca().add_artist(scalebar)
plt.show()
【讨论】:
以上是关于matplotlib如何在地图上插入图片的主要内容,如果未能解决你的问题,请参考以下文章