gpt4 book ai didi

python - 如何旋转 matplotlib map ?

转载 作者:行者123 更新时间:2023-12-01 14:41:20 24 4
gpt4 key购买 nike

从我从 https://s3.amazonaws.com/nyc-tlc/misc/taxi_zones.zip 获得的 shapefile 开始,我想绘制曼哈顿区,并为每个出租车区绘制轮廓。

此代码单独轮换每个单独的出租车区域,而不是一次轮换所有。

import geopandas as gpd
from matplotlib import pyplot as plt


fname = "path_to_shapefile.shp"
df = gpd.read_file(fname)
df = df[df['borough'] == "Manhattan"]
glist = gpd.GeoSeries([g for g in df['geometry']])
glist = glist.rotate(90)
glist.plot()

enter image description here

[编辑]
我进一步改进了它,以便能够以编程方式旋转图像。但是,如果我添加一个图例,那么它也会被旋转,这是不可取的。仍在寻找更好的解决方案。
请注意,还有这个 stackoverflow 帖子 ( How can I rotate a matplotlib plot through 90 degrees? ),但是,旋转绘图而不是图像的解决方案仅适用于 90 度旋转。
import geopandas as gpd
from matplotlib import pyplot as plt

import numpy as np
from scipy import ndimage
from matplotlib import transforms


fname = "path_to_shapefile.shp"
df = gpd.read_file(fname)
df = df[df['borough'] == "Manhattan"]
df.plot()
plt.axis("off")
plt.savefig("test.png")

img = plt.imread('test.png')

rotated_img = ndimage.rotate(img, -65)
plt.imshow(rotated_img, cmap=plt.cm.gray)
plt.axis('off')
plt.show()

[编辑2]

@PMende 对下面给出的答案的简单修改解决了它。
df = gpd.read_file(fname)
df = df[df['borough'] == "Manhattan"]
glist = gpd.GeoSeries([g for g in df['geometry']])
glist = glist.rotate(-65, origin=(0,0))
glist.plot()

关键是围绕一个点旋转所有对象,而不是围绕它们各自的原点。

[编辑 3] 如果有人试图这样做,并且需要将生成的旋转地理系列保存到数据框(例如,根据附加列为几何着色),则需要创建一个新的,只需编写
df['geometry'] = glist

不起作用。我现在不知道为什么。但是,以下代码对我有用。
new_dataframe = gpd.GeoDataFrame(glist)
new_dataframe = new_dataframe.rename(columns={0:'geometry'}).set_geometry('geometry')
new_dataframe.plot()

enter image description here

最佳答案

如果我正确理解 GeoPandas 的文档,您可以指定每个几何图形的旋转原点(默认情况下是每个几何图形的中心)。要获得所需的行为,您可以围绕同一原点旋转每个形状。

例如:

import geopandas as gpd
from matplotlib import pyplot as plt


fname = "path_to_shapefile.shp"
df = gpd.read_file(fname)
df = df[df['borough'] == "Manhattan"]

center = df["geometry"].iloc[0].centroid()
glist = gpd.GeoSeries([g for g in df['geometry']])
glist = glist.rotate(90, origin=center)

glist.plot()

我不能自己测试这个,但它应该能让你朝着正确的方向开始。

(虽然我也同意 @martinfeleis 的观点,即不一定要旋转几何图形,而是要旋转情节。)

关于python - 如何旋转 matplotlib map ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59493402/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com