总的来讲,matplotlib用于图表设计、cartopy用于地图展示、geopandas用于gis数据处理,搭配起来使用几乎可以媲美专业的gis软件。
而且它们可定制性极强,你几乎自行可以设计所有的地图细节,这是tableau,finereport,excel所无法实现的。
因为是基于python生态的地图工具,处理大数据集不在话下,哪怕GB、TB级别的数据,也可以通过合适的数据处理手段来生成地图。
cartopy绘图
用 Cartopy 画地图的基本流程并不复杂:
-
创建画布。
-
通过指定 projection 参数,创建 GeoAxes 对象。
-
调用 GeoAxes 的方法画图。
比如绘制海岸线:
import cartopy.crs as ccrsfrom cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatterimport matplotlib.pyplot as pltdef main(): fig = plt.figure(figsize=(8, 10)) # Label axes of a Plate Carree projection with a central longitude of 180: ax1 = fig.add_subplot(2, 1, 1, projection=ccrs.PlateCarree(central_longitude=180)) ax1.set_global() ax1.coastlines() ax1.set_xticks([0, 60, 120, 180, 240, 300, 360], crs=ccrs.PlateCarree()) ax1.set_yticks([-90, -60, -30, 0, 30, 60, 90], crs=ccrs.PlateCarree()) lon_formatter = LongitudeFormatter(zero_direction_label=True) lat_formatter = LatitudeFormatter() ax1.xaxis.set_major_formatter(lon_formatter) ax1.yaxis.set_major_formatter(lat_formatter) plt.show()if __name__ == '__main__': main()
绘制地图:
import cartopy.crs as ccrsimport cartopy.feature as cfeatureimport matplotlib.pyplot as pltdef main(): fig = plt.figure() ax = fig.add_subplot(1, 1, 1, projection=ccrs.PlateCarree()) ax.set_extent([-20, 60, -40, 45], crs=ccrs.PlateCarree()) ax.add_feature(cfeature.LAND) ax.add_feature(cfeature.OCEAN) ax.add_feature(cfeature.COASTLINE) ax.add_feature(cfeature.BORDERS, linestyle=':') ax.add_feature(cfeature.LAKES, alpha=0.5) ax.add_feature(cfeature.RIVERS) plt.show()if __name__ == '__main__': main()
##geopandas绘图
geopandas主要用来处理地理空间数据,也可以通过matplotlib接口来展示地图。
当然它也是依赖shapely、fiona、pyproj等众多地理空间库来进行数据分析、处理的,数据形态类似pandas的dataframe。
import geopandas as gpdfrom matplotlib_scalebar.scalebar import ScaleBarnybb = gpd.read_file(gpd.datasets.get_path('nybb'))nybb = nybb.to_crs(32619) # Convert the dataset to a coordinate# system which uses metersax = nybb.plot()ax.add_artist(ScaleBar(1))
如果想制作出版级的地图可视化图表,且处理大数据集,推荐使用matplotlib+cartopy+geopandas的组合,从GIS数据处理、到Geo、Map地图绘制,到可视化图片展示生成,它们都能完美解决。因为是基于python生态的地图工具,处理大数据集不在话下,哪怕GB、TB级别的数据,也可以通过合适的数据处理手段来生成地图。而且它们可定制性极强,你几乎自行可以设计所有的地图细节,这是tableau,finereport,excel所无法实现的。你还可以通过folium读取地图进行可视化。
Plotly JavaScript开源图形库。 Plotly.js构建在d3.js和stack.gl之上,是一个高级的声明式图表库。 plotly.js随附40多种图表类型,包括3D图表,统计图和SVG
地图
。 plotly.js是免费的开放源代码,您可以在GitHub上查看源代码,报告问题或做出贡献。 为了使plotly.js与Webpack一起构建,您需要安装ify-loader@v1.1.0+并将其添加到您的webpack.config.json中。 这增加了对Webpack的Browserify转换兼容性,这对于某些plotly.js依赖项是必需的。 当用户将鼠标悬停在使用plotly.js生成的图形上时,图形栏会显示在图形的右上方。 这为用户提供了几种与图形交互的选项。 当用户将鼠标悬停在使用plotly.js生成的图形上时,图形栏会显示在图形的右上方。 这为用户提供了几种与图形交互的选项。
matplotlib
比例尺
为提供新的艺术家以显示比例尺,又称微米条。 当显示使用plt.imshow(...)绘制的校准图像时,此功能特别有用。
美工师支持直接从ScaleBar对象或
matplotlib
rc进行自定义。
使用pip进行安装的最简单方法:
pip install
matplotlib
-scalebar
对于从git存储库进行开发安装:
git clone git@github.com:ppinard/
matplotlib
-scalebar.git
pip install -e
matplotlib
-scalebar
有很多方法可以自定义比例尺。 ScaleBar类的参数的示例和说明在给出,但这是快速入门指南。
构造函数参数dx和unit指定像素尺寸。 例如ScaleBar(0.2, 'um')表示每个像素等于0.2微米。 默认情况下,比例尺使用SI
matplotlib
-scalebar是一个
Python
库,用于在
matplotlib
图形中添加比例尺。它允许用户指定比例尺的大小、位置、字体和颜色,以及比例尺的单位。该库支持不同的比例尺单位,例如米、英尺、英寸等。
matplotlib
-scalebar安装命令如下:
pip install
matplotlib
-scalebar
比例尺是一种用于描述图上线段长度与实际相应线段长度之间关系的方法。其基本公式为:比例尺 = 图上距离 / 实际距离。比例尺的表示方法可以分为三种:
数字式,采用数字的比例形
Plotly JavaScript 开源图形库。 Plotly.js 建立在 d3.js 和 stack.gl 之上,是一个高级的声明性图表库。 plotly.js 附带 40 多种图表类型,包括 3D 图表、统计图表和 SVG
地图
。 plotly.js 是免费和开源的,您可以查看源代码、报告问题或在 GitHub 上做出贡献。 要使用 Webpack 构建 plotly.js,您需要安装 ify-loader@v1.1.0+ 并将其添加到您的 webpack.config.json。 这增加了 Browserify 对 Webpack 的转换兼容性,这对于某些 plotly.js 依赖项是必需的。 当用户将鼠标悬停在使用 plotly.js 生成的图形上时,图形的右上角会出现一个模式栏。 这为用户提供了多种与图交互的选项。 当用户将鼠标悬停在使用 plotly.js 生成的图形上时,图形的右上角会出现一个模式栏。 这为用户提供了多种与图交互的选项。
vue-plotly plotly.js的薄vue包装器它提供:所有plotly.js方法和事件数据React性重新调整大小后重新绘制Live示例https://david-vue-plotlyplotly.js的薄vue包装器它提供:所有plotly.js方法和事件数据React性重新调整大小后的实时示例https://david-desmaisons.github.io/vue-plotly/用法
从'vue-plotly'导入{Plotly}导出默认{组件:{Plotly},data:{data:[{x:[1,2,3,4],y:[10,15,13,17],类型:“散布图”}],布局:{标题:“我的图表”
目前
python
,spark,scala十分火爆,于是我就利用爬虫将猎聘上的招聘信息进行了一下获取,相比起来,猎聘上的职位数量还是很多的,3中技术类型以“
python
,spark,scala”作为关键词,一共爬取了一万多条信息,爬取的主要信息为:公司名称,职位名称,薪资,地址,职位信息。最后将爬取后的数据,进行了简单的处理,进行
可视化
。
爬虫的写法可以查看https://blog.c...
要
实现
Python
+
matplotlib
数据
可视化
鼠标悬停自动标注功能,可以使用
matplotlib
中的annotate()函数,该函数可以在图形中添加注释文本。
具体
实现
步骤如下:
1. 导入必要的库:
```
python
import
matplotlib
.pyplot as plt
from
matplotlib
.offsetbox import OffsetImage, AnnotationBbox
2. 创建图形并绘制数据:
```
python
fig, ax = plt.subplots()
ax.plot(x_data, y_data)
3. 定义鼠标悬停事件的回调函数,该函数将在鼠标悬停时被调用,根据鼠标所在的数据点位置添加注释文本:
```
python
def on_hover(event):
for i in range(len(x_data)):
if event.xdata is not None and event.ydata is not None:
if x_data[i] - 0.5 <= event.xdata <= x_data[i] + 0.5 and \
y_data[i] - 0.5 <= event.ydata <= y_data[i] + 0.5:
img = plt.imread(image_files[i])
imagebox = OffsetImage(img, zoom=0.2)
ab = AnnotationBbox(imagebox, (x_data[i], y_data[i]))
ax.add_artist(ab)
fig.canvas.draw_idle()
4. 将回调函数绑定到图形的鼠标悬停事件上:
```
python
fig.canvas.mpl_connect('motion_notify_event', on_hover)
完整代码:
```
python
import
matplotlib
.pyplot as plt
from
matplotlib
.offsetbox import OffsetImage, AnnotationBbox
x_data = [1, 2, 3, 4, 5]
y_data = [2, 4, 1, 5, 3]
image_files = ['image1.png', 'image2.png', 'image3.png', 'image4.png', 'image5.png']
fig, ax = plt.subplots()
ax.plot(x_data, y_data)
def on_hover(event):
for i in range(len(x_data)):
if event.xdata is not None and event.ydata is not None:
if x_data[i] - 0.5 <= event.xdata <= x_data[i] + 0.5 and \
y_data[i] - 0.5 <= event.ydata <= y_data[i] + 0.5:
img = plt.imread(image_files[i])
imagebox = OffsetImage(img, zoom=0.2)
ab = AnnotationBbox(imagebox, (x_data[i], y_data[i]))
ax.add_artist(ab)
fig.canvas.draw_idle()
fig.canvas.mpl_connect('motion_notify_event', on_hover)
plt.show()
执行该代码后,将会在图形中添加自动标注功能。当鼠标悬停在数据点附近时,会自动在该点添加注释文本,并显示与该数据点相关的图片。