作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
为了自己的学习目的,我正在使用住房数据集,并且我希望能够将我的地 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()
我得到以下情节:
最佳答案
好吧,这个问题已经很老了,但我有一个不同的答案,可能有人会感兴趣......
我一直在研究完全相同的问题。 GitHub ( https://github.com/ageron/handson-ml.git ) 上提供的代码可满足您的需求(请参阅 02_end_to_end_machine_learning_project.ipynb)。
但是,该代码使用加利福尼亚州 map 作为图像,并仅在其顶部绘制点。一种替代方法是构建一张真实的 map ,并在其上绘制点,而无需读取 ma 图像。为此,我使用了下面的代码。您需要install cartopy ,如果您还想要县线,则必须使用 here 中的说明来绘制它们。 .
这是我使用的代码:
# 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/
我是一名优秀的程序员,十分优秀!