当前位置: 首页 > news >正文

如何使用Python的matplotlib和seaborn库绘制颜色渐变的高级散点图

前言

我的科研论文中需要绘制一个精美的散点图,表达的是各个散点距离中心点的距离远近情况,特点如下:

  1. 绘图的美观程度高
  2. 根据距离目标点的距离的不同,各个散点能有颜色或者是透明度上的区分
  3. 相应的统计量是与中心点(目标点)的偏离均值和方差

基本思路

要创建一个更加美观的散点图并且根据距离中心点的远近改变颜色或透明度,可以使用matplotlib库的高级功能,并且结合seaborn库来增强图形的美观程度。

代码

下面提供实例,代码作为模板

from cProfile import label
from tkinter.ttk import Style
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
from scipy.spatial.distance import cdistnp.random.seed(0)# 假设我们已经有了一些数据
# 这里生成随机数据来代表散点的坐标
x = np.random.rand(100)
y = np.random.rand(100)# 假设中心点在(0.5, 0.5)
center = np.array([0.5, 0.5])# 计算每个点到中心点的距离
points = np.vstack((x, y)).T
distances = cdist(points, np.array([center]))# 设置颜色或透明度与距离相关
# 这里我们使用距离来设置颜色
colors = distances.flatten()# 开始绘图
sns.set(style="whitegrid")  # 使用seaborn的白色网格风格
plt.figure(figsize=(10, 8))  # 设置图的大小# 绘制散点图,颜色根据距离深浅,大小统一为50
plt.scatter(x, y, c=colors, cmap='viridis', alpha=0.6, s=50)# 绘制中心点
plt.scatter(center[0], center[1], c='red', s=100, label='Target')# 添加图例
plt.legend()# 添加色条
plt.colorbar(label='Distance from target')# 设置标题和轴标签
plt.title('Scatter Plot by Distance from Target')
plt.xlabel('X coordinate ')
plt.ylabel('Y coordinate ')# 显示图形
plt.show()# 数据分析
# 计算统计量,比如均值、标准差等
mean_distance = np.mean(distances)
std_distance = np.std(distances)# 打印统计结果
print(f'Mean distance from center: {mean_distance}')
print(f'Standard deviation of distances: {std_distance}')# 可视化距离的分布情况
plt.figure(figsize=(8, 6))
sns.distplot(distances, bins=20, kde=True)
plt.title('Distance Distribution')
plt.xlabel('Distance')
plt.ylabel('Frequency')
plt.show()

代码解释

  1. 首先使用numpy生成了随机的散点数据。
  2. 使用scipy库中的cdist函数计算所有点到中心点的欧氏距离。
  3. 用scatter函数绘制散点图,其中颜色的深浅表示了点距离中心的远近。这里使用viridis色图,它在可视化距离信息时效果不错。
  4. 最后,计算所有距离的均值和标准差,并且使用seaborn的distplot函数绘制距离的分布图,从而对数据进行了基本的统计分析。

注意:这段代码使用了seaborn.distplot,这个函数在seaborn的最新版本中已经被seaborn.histplot所替代,如果你的seaborn版本较新,应当相应地修改。

结果

绘制精美散点图效果

延伸阅读

如何使用Python和matplotlib绘制机器人运动偏差路径图——实用教程与代码解析

http://www.lryc.cn/news/218316.html

相关文章:

  • 根据Word模板,使用POI生成文档
  • 大语言模型的学习路线和开源模型的学习材料《一》
  • 【案例】3D地球
  • 安全组问题 访问华为云服务器端口
  • 音视频常见问题(七):首开慢
  • [SSD综述1.2] SSD 和 HDD(机械硬盘) 区别?
  • ali sdm docker
  • HCIE-kubernetes(k8s)-Authentication身份验证
  • uniapp开发小程序接入阿里云TTS语音合成(RESTful API)
  • 稳定性测试—fastboot和monkey区别
  • Python库Requests的爬虫程序爬取视频通用模版
  • ngx_http_set_response_header阅读
  • 词典查询工具django-mdict
  • Ubuntu20.04搭建RISC-V和qemu环境
  • 代码生成器
  • AndroidMonitor - 基于AndroidLocalService实现的抓取OKHTTP请求的工具
  • LuatOS-SOC接口文档(air780E)--nbiot - NB-IOT操作库
  • 大数据之LibrA数据库系统告警处理(ALM-12017 磁盘容量不足)
  • Python算法例4 求平方根
  • LVGL_多界面切换
  • C/C++输出字符菱形 2021年3月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析
  • DI93a HESG440355R3 通过其Achilles级认证提供网络安全
  • Go中Panic and Recover
  • webpack 与 grunt、gulp 的不同?
  • 园区网真实详细配置大全案例
  • 小程序video标签在底部出现1px无法去除的黑色线
  • 渗透工具使用及思路总结(持续更新)
  • 速卖通新卖家有必要测评吗?
  • 从lc114. 二叉树展开为链表到lc-LCR 155二叉搜索树转化为排序的双向链表
  • 做读书笔记时的一个高效小技巧