如何用Python来仿制一张R语言的数据可视化图
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,如何用Python来仿制一张R语言的数据可视化图,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。简介开门见山,今天我们要模仿的数据可视
千家信息网最后更新 2026年11月01日如何用Python来仿制一张R语言的数据可视化图
如何用Python来仿制一张R语言的数据可视化图,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
简介
开门见山,今天我们要模仿的数据可视化作品来自 「#TidyTuesday」 活动于2020年1月28日发布的「旧金山街道树木数据集」下的众多参赛作品中,由Philippe Massicotte创作的(如图1所示)非常受欢迎的 「Street trees of San Francisco」
而路网数据我们则可以利用osmnx进行在线获取,只需传入我们的旧金山面数据bbox范围,配合
osmnx进行获取即可:
接着我们在上述数据基础上对每个社区面内部的街道树木数量进行统计并对数据进行分箱,配上预设区间的色彩值:
# 统计每个社区内部的树木数量sf_trees = \( gpd # 空间连接 .sjoin(left_df=sf, right_df=trees, op='contains', how='left') # 按照name分组计数(这里未连接到任何数的社区被 # 记为1本质上是错误的,但我们绘图分段后这一点不影响) .groupby('name') .agg({ 'name': 'count', 'geometry': 'first' }) .rename(columns={'name': '数量'}) .reset_index(drop=False) # 直接转为GeoDataFrame .pipe(gpd.GeoDataFrame, crs='EPSG:4326'))sf_trees['颜色'] = ( pd .cut(sf_trees['数量'], bins=[0, 2500, 5000, 7500, 10000, max(sf_trees['数量'])], labels=['#e4f1e1', '#c0dfd1', '#67a9a2', '#3b8383', '#145e64']))最后别忘记了我们作为轮廓的缓冲区生成:
# 生成轮廓缓冲区sf_bounds = gpd.GeoSeries([sf.buffer(0.001).unary_union], crs='EPSG:4326')
「主要视觉元素绘制」
做好这些准备后我们直接就可以先将图像的主体元素绘制出来:
import matplotlib.pyplot as pltfrom matplotlib import font_manager as fm# 设置全局默认字体plt.rcParams['font.sans-serif'] = ['Times New Roman']fig, ax = plt.subplots(figsize=(6, 6))# 设置背景色ax.set_facecolor('#333333')fig.set_facecolor('#333333')# 图层1:缓冲区轮廓ax = ( sf_bounds .plot(ax=ax, facecolor='none', edgecolor='#cccccc', linewidth=1))# 图层2:带有树木统计信息的社区面ax = ( sf_trees .plot(color=sf_trees['颜色'], edgecolor='#333333', linewidth=0.5, ax=ax))# 图层3:osm路网ax = ( roads .plot(linewidth=0.05, edgecolor='#3c3d3d', ax=ax))# 设置x轴ax.set_xticks([-122.5, -122.45, -122.4, -122.35])ax.set_xticklabels(['122.5°W', '122.45°W', '122.4°W', '122.35°W'])# 设置y轴ax.set_yticks([37.72, 37.74, 37.76, 37.78, 37.8, 37.82])ax.set_yticklabels(['37.72°N', '37.74°N', '37.76°N', '37.78°N', '37.8°N', '37.82°N'])# 设置坐标轴样式ax.tick_params(axis='both', labelcolor='#737373', color='none', labelsize=8)# 隐藏周围的spines线条ax.spines['left'].set_color('none')ax.spines['right'].set_color('none')ax.spines['top'].set_color('none')ax.spines['bottom'].set_color('none')# 导出图像fig.savefig('图4.png', dpi=600, bbox_inches='tight')「辅助视觉元素的添加」
接下来我们只需要补充上各种点睛之笔的小元素即可,其中值得一提的是下方的图例我们用inset_axes()插入子图的方式灵活实现。
并且外部字体文件的使用也是很添彩的,我们这里就分别在「标题」和「刻度标签」处使用到了两种特殊的字体(你可以在开头的Github仓库找到我用到的所有字体文件):
fig, ax = plt.subplots(figsize=(6, 6))# 设置背景色ax.set_facecolor('#333333')fig.set_facecolor('#333333')# 图层1:缓冲区轮廓ax = ( sf_bounds .plot(ax=ax, facecolor='none', edgecolor='#cccccc', linewidth=1))# 图层2:带有树木统计信息的社区面ax = ( sf_trees .plot(color=sf_trees['颜色'], edgecolor='#333333', linewidth=0.5, ax=ax))# 图层3:osm路网ax = ( roads .plot(linewidth=0.05, edgecolor='#3c3d3d', ax=ax))# 设置x轴ax.set_xticks([-122.5, -122.45, -122.4, -122.35])ax.set_xticklabels(['122.5°W', '122.45°W', '122.4°W', '122.35°W'])# 设置y轴ax.set_yticks([37.72, 37.74, 37.76, 37.78, 37.8, 37.82])ax.set_yticklabels(['37.72°N', '37.74°N', '37.76°N', '37.78°N', '37.8°N', '37.82°N'])# 设置坐标轴样式ax.tick_params(axis='both', labelcolor='#737373', color='none', labelsize=8)# 隐藏周围的spines线条ax.spines['left'].set_color('none')ax.spines['right'].set_color('none')ax.spines['top'].set_color('none')ax.spines['bottom'].set_color('none')# 以插入子图的方式添加下方图例ax_bar = ax.inset_axes((0.25, -0.12, 0.5, 0.015))ax_bar.set_facecolor('#333333')ax_bar.spines['left'].set_color('none')ax_bar.spines['right'].set_color('none')ax_bar.spines['top'].set_color('none')ax_bar.spines['bottom'].set_color('none')ax_bar.bar(range(5), [1]*5, width=0.975, color=['#e4f1e1', '#c0dfd1', '#67a9a2', '#3b8383', '#145e64'])ax_bar.set_yticks([])ax_bar.set_xticks([i+0.5 for i in range(4)])ax_bar.set_xticklabels(['2500', '5000', '7500', '10000'], fontdict={'fontproperties': fm.FontProperties(fname="RobotoCondensed-Regular.ttf")})ax_bar.tick_params(color='none', labelcolor='#ffffff', labelsize=8, pad=0)ax.set_title('Street trees of San Francisco', fontsize=24, color='#ffffff', pad=40, fontproperties=fm.FontProperties(fname="Amaranth-Bold.ttf"))ax.text(0.5, 1.08, '''There are a total of 192987 trees in San Francisco regrouped into 571 species.The district with the most number of trees is Mission whereas the one withthe least number of trees is LincoLn Park / Ft. Miley.''', transform=ax.transAxes, ma='center', ha='center', va='top', color='#ffffff')ax.text(0.5, -0.22, 'Visualization by CNFeffery', fontsize=8, color='#737373', ha='center', transform=ax.transAxes)# 导出图像fig.savefig('图5.png', dpi=600, bbox_inches='tight')关于如何用Python来仿制一张R语言的数据可视化图问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。
数据
数量
树木
社区
元素
字体
缓冲区
轮廓
统计
缓冲
可视化
图像
路网
问题
颜色
语言
作品
信息
图例
坐标
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
保险科技 互联网保险
河南云网互联网络科技有限公司
工业互联网科技新基建
科技制造互联网公司
北京互联网络科技有限公司
上海亿帐通互联网科技
佰商互联网科技有限公司
恒生科技互联网指数分析
开启互联网科技时代小说
互联网科技中介
随着互联网科技发展
华服互联网科技官网
湖南诚度互联网科技有限公司
上海宁丞科技互联网
呼和浩特新华互联网科技学院
互联网时代的科技公司
雨阳互联网卡科技有限公司
济南小医互联网科技有限公司招聘
吉林省码上互联网科技电话
前海云享互联网科技
山东特亿宝互联网科技有限公司
易互联网科技有限公司
互联网金融 金融科技
互联网金融科技创新
互联网科技logo设计
苏州铭阳互联网科技有限公司
消费医药和互联网科技
用友工业互联网科技发展
抖集互联网科技技术咨询
中国主要互联网科技公司