gpt4 book ai didi

python - 在 map 上叠加散点图(img)

转载 作者:行者123 更新时间:2023-12-01 02:38:47 50 4
gpt4 key购买 nike

为了自己的学习目的,我正在使用住房数据集,并且我希望能够将我的地 block 叠加在 map 上,以便更好地了解“热点”。

我的代码如下:

housing = pd.read_csv('https://raw.githubusercontent.com/ageron/handson-ml/master/datasets/housing/housing.csv')

plt.figure()
housing.plot(x='longitude', y='latitude', kind='scatter', alpha=0.4,
s= housing['population']/100, label='population', figsize=(10,7),
c= 'median_house_value', cmap=plt.get_cmap('jet'), colorbar=True, zorder=5)
plt.legend()
plt.show()

我保存的图片为'California.png'

这是我尝试过的:

img=imread('California.png')

plt.figure()
plt.imshow(img,zorder=0)
housing.plot(x='longitude', y='latitude', kind='scatter', alpha=0.4,
s= housing['population']/100, label='population', figsize=(10,7),
c= 'median_house_value', cmap=plt.get_cmap('jet'), colorbar=True, zorder=5)
plt.legend()
plt.show()

但这只给了我两个情节。我尝试过更改索引,但无济于事。

有没有简单的方法可以实现这一点?谢谢。

编辑:使用@nbeuchat下面的代码:

plt.figure(figsize=(10,7))
img=imread('California.png')

plt.imshow(img,zorder=0)
ax = plt.gca()
housing.plot(x='longitude', y='latitude', kind='scatter', alpha=0.4,
s= housing['population']/100, label='population', ax=ax,
c= 'median_house_value', cmap=plt.get_cmap('jet'), colorbar=True,
zorder=5)
plt.legend()
plt.show()

我得到以下情节:

enter image description here

最佳答案

好吧,这个问题已经很老了,但我有一个不同的答案,可能有人会感兴趣......

我一直在研究完全相同的问题。 GitHub ( https://github.com/ageron/handson-ml.git ) 上提供的代码可满足您的需求(请参阅 02_end_to_end_machine_learning_project.ipynb)。

但是,该代码使用加利福尼亚州 map 作为图像,并仅在其顶部绘制点。一种替代方法是构建一张真实的 map ,并在其上绘制点,而无需读取 ma 图像。为此,我使用了下面的代码。您需要install cartopy ,如果您还想要县线,则必须使用 here 中的说明来绘制它们。 .

最终生成的图片是这样的: Housing prices in California, plotted with Cartopy

这是我使用的代码:

# Trying to use a real map
import cartopy.crs as ccrs
import cartopy.feature as cfeature

plt.figure(figsize=(10,7))

# Creates the map
ca_map = plt.axes(projection=ccrs.PlateCarree())

ca_map.add_feature(cfeature.LAND)
ca_map.add_feature(cfeature.OCEAN)
ca_map.add_feature(cfeature.COASTLINE)
ca_map.add_feature(cfeature.BORDERS, linestyle=':')
ca_map.add_feature(cfeature.LAKES, alpha=0.5)
ca_map.add_feature(cfeature.RIVERS)
ca_map.add_feature(cfeature.STATES.with_scale('10m'))

# To add county lines
import cartopy.io.shapereader as shpreader

reader = shpreader.Reader('datasets/housing/countyl010g.shp')
counties = list(reader.geometries())
COUNTIES = cfeature.ShapelyFeature(counties, ccrs.PlateCarree())
ca_map.add_feature(COUNTIES, facecolor='none', edgecolor='gray')

ca_map.xaxis.set_visible(True)
ca_map.yaxis.set_visible(True)

# Plots the data onto map
plt.scatter(housing['longitude'], housing['latitude'], alpha=0.4,
s=housing["population"]/100, label="population",
c=housing['median_house_value'],
cmap=plt.get_cmap("jet"),
transform=ccrs.PlateCarree())

# Colorbar
prices = housing["median_house_value"]
tick_values = np.linspace(prices.min(), prices.max(), 11)
cbar = plt.colorbar()
cbar.ax.set_yticklabels(["$%dk"%(round(v/1000)) for v in tick_values], fontsize=14)
cbar.set_label('Median House Value', fontsize=16)

# Plot labels
plt.ylabel("Latitude", fontsize=14)
plt.xlabel("Longitude", fontsize=14)
plt.legend()

save_fig("housing_prices_scatterplot_cartopy")

这里的优点是使用真实的 map ,并且现在可以针对您想要使用的世界的任何部分轻松更改此代码。玩得开心!

关于python - 在 map 上叠加散点图(img),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45947971/

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