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

Python数据可视化科技图表绘制系列教程(六)

目录

散点图1

散点图2

添加线性回归线的散点图

自定义点形状的散点图

不同样式的散点图

抖动散点图

边际图

边缘为直方图的边际图

边缘为箱线图的边际图

曼哈顿图


 【声明】:未经版权人书面许可,任何单位或个人不得以任何形式复制、发行、出租、改编、汇编、传播、展示或利用本博客的全部或部分内容,也不得在未经版权人授权的情况下将本博客用于任何商业目的。但版权人允许个人学习、研究、欣赏等非商业性用途的复制和传播。非常推荐大家学习《Python数据可视化科技图表绘制》这本书籍。

散点图1

import seaborn as sns  # 导入seaborn库并简写为sns
import matplotlib.pyplot as plt
df = sns.load_dataset('iris',data_home='seaborn',cache=True)  # 加载 iris 数据集
# 绘制散点图
sns.regplot(x=df["sepal_length"], y=df["sepal_width"])
# 绘制散点图(默认进行线性拟合),如图所示sns.regplot(x=df["sepal_length"], y=df["sepal_width"], fit_reg=False)# 保存图片
plt.savefig("P142散点图1.png", dpi=600, bbox_inches='tight', transparent=True)
plt.show()
散点图1

散点图2

import pandas as pd
import numpy as np
import matplotlib.pyplot as pltmidwest = pd.read_csv(r'E:\PythonProjects\experiments_figures\绘图案例数据\midwest_filter.csv')  # 导入数据集
categories = np.unique(midwest['category'])  # 获取数据集中的唯一类别
# 生成与唯一类别数量相同的颜色
# 使用 matplotlib 的颜色映射函数来生成颜色
colors = [plt.cm.tab10(i / float(len(categories) - 1)) for i inrange(len(categories))]# 绘制每个类别的图形
# 设置图形的大小、分辨率和背景色
plt.figure(figsize=(10, 6), dpi=600, facecolor='w', edgecolor='k')# 遍历每个类别,并使用 scatter 函数绘制散点图
for i, category in enumerate(categories):# 使用 loc 方法筛选出特定类别的数据,并绘制散点图plt.scatter('area', 'poptotal',data=midwest.loc[midwest.category == category, :],s=20, color=colors[i], label=str(category))  # 使用 color 参数# 图形修饰
plt.gca().set(xlim=(0.0, 0.1), ylim=(0, 90000),xlabel='Area', ylabel='Population')  # 设置 x 轴和 y 轴的范围、标签# 设置 x 轴和 y 轴的刻度字体大小
plt.xticks(fontsize=12)
plt.yticks(fontsize=12)plt.title("Scatterplot ", fontsize=22)  # 设置图形标题
plt.legend(fontsize=12)  # 添加图例# 保存图片
plt.savefig("P143散点图2.png", dpi=600, bbox_inches='tight', transparent=True)
plt.show()
散点图2

添加线性回归线的散点图

import pandas as pd  # 导入pandas库并简写为pd
import matplotlib.pyplot as plt  # 导入matplotlib.pyplot模块并简写为plt
import seaborn as sns  # 导入seaborn库并简写为snsdf = sns.load_dataset('iris')  # 加载iris数据集
# 绘制散点图,并添加红色线性回归线
fig, ax = plt.subplots(figsize=(8, 6))  # 创建图形和子图对象,并设置图形大小
sns.regplot(x=df["sepal_length"], y=df["sepal_width"],# 绘制散点图,指定横纵轴数据line_kws={"color": "r"}, ax=ax)  # 设置线性回归线颜色为红色
# 保存图片
plt.savefig("P144添加线性回归线的散点图_添加红色线性回归线.png", dpi=600, bbox_inches='tight', transparent=True)
plt.show()# 绘制散点图,并添加半透明的红色线性回归线
fig, ax = plt.subplots(figsize=(8, 6))  # 创建图形和子图对象,并设置图形大小
sns.regplot(x=df["sepal_length"], y=df["sepal_width"],# 绘制散点图,指定横纵轴数据line_kws={"color": "r", "alpha": 0.4}, ax=ax)
# 设置线性回归线颜色为红色,透明度为0.4
# 保存图片
plt.savefig("P144添加线性回归线的散点图_添加半透明的红色线性回归线.png", dpi=600, bbox_inches='tight', transparent=True)
plt.show()# 绘制散点图,并自定义线性回归线的线宽、线型和颜色
fig, ax = plt.subplots(figsize=(8, 6))  # 创建图形和子图对象,并设置图形大小
sns.regplot(x=df["sepal_length"], y=df["sepal_width"],# 绘制散点图,指定横纵轴数据line_kws={"color": "r", "alpha": 0.4, "lw": 5, "ls": "--"}, ax=ax)
# 设置线性回归线的颜色、透明度、线宽和线型
# 保存图片
plt.savefig("P144添加线性回归线的散点图_自定义线性回归线的线宽、线型和颜色.png", dpi=600, bbox_inches='tight', transparent=True)
plt.show()
添加线性回归线的散点图_添加红色线性回归线
添加线性回归线的散点图_添加半透明的红色线性回归线
添加线性回归线的散点图_自定义线性回归线的线宽、线型和颜色

自定义点形状的散点图

import pandas as pd  # 导入pandas库并简写为pd
import matplotlib.pyplot as plt  # 导入matplotlib.pyplot模块并简写为plt
import seaborn as sns  # 导入seaborn库并简写为snsdf = sns.load_dataset('iris')  # 加载iris数据集
fig, ax = plt.subplots(figsize=(8, 6))  # 创建图形和子图对象,并设置图形大小
# 绘制散点图,不添加回归线,标记形状为"+"
sns.regplot(x=df["sepal_length"], y=df["sepal_width"],marker="+", fit_reg=False, ax=ax)# 保存图片
plt.savefig("P146使用标记形状“+”.png", dpi=600, bbox_inches='tight', transparent=True)
plt.show()fig, ax = plt.subplots(figsize=(8, 6))  # 创建图形和子图对象,并设置图形大小
# 绘制散点图,不添加回归线,设置散点标记颜色为暗红色,透明度为0.3,标记大小为200
sns.regplot(x=df["sepal_length"], y=df["sepal_width"], fit_reg=False,scatter_kws={"color": "darkred", "alpha": 0.3, "s": 200}, ax=ax)# 保存图片
plt.savefig("P146定义颜色、透明度和大小.png", dpi=600, bbox_inches='tight', transparent=True)
plt.show()
使用标记形状“+”
定义颜色、透明度和大小

不同样式的散点图

import seaborn as sns  # 导入seaborn库
import matplotlib.pyplot as plt  # 导入matplotlib.pyplot库df = sns.load_dataset('iris')  # 加载iris数据集
# 使用'hue'参数提供一个因子变量,并绘制散点图
sns.lmplot(x="sepal_length", y="sepal_width",data=df, fit_reg=False, hue='species', legend=False)
# 将图例移动到图形中的一个空白部分
plt.legend(loc='lower right')
# 保存图片
plt.savefig("P147散点图_着色不同的数据子集.png", dpi=600, bbox_inches='tight', transparent=True)
plt.show()# 绘制散点图,并指定每个数据子集的标记形状
sns.lmplot(x="sepal_length", y="sepal_width", data=df,fit_reg=False, hue='species', legend=False, markers=["o", "x", "1"])
# 将图例移动到图形中的一个空白部分
plt.legend(loc='lower right')
# 保存图片
plt.savefig("P147散点图_指定标记形状.png", dpi=600, bbox_inches='tight', transparent=True)
plt.show()# 使用调色板来着色不同的数据子集
sns.lmplot(x="sepal_length", y="sepal_width",data=df, fit_reg=False, hue='species',legend=False, palette="Set2")
# 将图例移动到图形中的一个空白部分
plt.legend(loc='lower right')
# 保存图片
plt.savefig("P147散点图_使用了调色板.png", dpi=600, bbox_inches='tight', transparent=True)
plt.show()# 控制每个数据子集的颜色
sns.lmplot(x="sepal_length", y="sepal_width",data=df, fit_reg=False, hue='species', legend=False,palette=dict(setosa="blue", virginica="red",versicolor="green"))
# 将图例移动到图形中的一个空白部分
plt.legend(loc='lower right')
# 保存图片
plt.savefig("P147散点图_自定义的调色板.png", dpi=600, bbox_inches='tight', transparent=True)
plt.show()
散点图_着色不同的数据子集
散点图_指定标记形状
散点图_使用了调色板
散点图_自定义的调色板

抖动散点图

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as pltdf = pd.read_csv(r"E:\PythonProjects\experiments_figures\绘图案例数据\mpg_ggplot2.csv")  # 导入数据# 绘制Stripplot
fig, ax = plt.subplots(figsize=(12, 6), dpi=80)
sns.stripplot(x='cty', y='hwy', hue='class', data=df, jitter=0.25, size=6,ax=ax, linewidth=.5)
# 修饰
plt.title('Use jittered plots to avoid overlapping of points', fontsize=22)
# 保存图片
plt.savefig("P149抖动散点图.png", dpi=600, bbox_inches='tight', transparent=True)
plt.show()
抖动散点图

边际图

import seaborn as sns  # 导入Seaborn库并简写为sns
import matplotlib.pyplot as plt  # 导入Matplotlib.pyplot库并简写为pltdf = sns.load_dataset('iris')  # 从Seaborn中加载iris数据集# 创建带有散点图的边际图
sns.jointplot(x=df["sepal_length"], y=df["sepal_width"], kind='scatter')
plt.savefig("P150边际图1.png", dpi=600, bbox_inches='tight', transparent=True)
plt.close()  # 关闭当前图,避免影响后续绘图# 创建带有六边形图的边际图
sns.jointplot(x=df["sepal_length"], y=df["sepal_width"], kind='hex')
plt.savefig("P150边际图2.png", dpi=600, bbox_inches='tight', transparent=True)
plt.close()  # 关闭当前图,避免影响后续绘图# 创建带有核密度估计图的边际图
sns.jointplot(x=df["sepal_length"], y=df["sepal_width"], kind='kde')
plt.savefig("P150边际图3.png", dpi=600, bbox_inches='tight', transparent=True)
plt.close()  # 关闭当前图,避免影响后续绘图# 自定义联合图中的散点图
sns.jointplot(x=df["sepal_length"], y=df["sepal_width"],kind='scatter', s=200, color='m',edgecolor="skyblue", linewidth=2)
plt.savefig("P150边际图4.png", dpi=600, bbox_inches='tight', transparent=True)
plt.close()  # 关闭当前图,避免影响后续绘图# 自定义颜色
sns.set_theme(style="white", color_codes=True)
sns.jointplot(x=df["sepal_length"], y=df["sepal_width"], kind='kde',color="skyblue")
plt.savefig("P150边际图5.png", dpi=600, bbox_inches='tight', transparent=True)
plt.close()  # 关闭当前图,避免影响后续绘图# 自定义直方图
sns.jointplot(x=df["sepal_length"], y=df["sepal_width"], kind='hex',marginal_kws=dict(bins=30, fill=True))
plt.savefig("P150边际图6.png", dpi=600, bbox_inches='tight', transparent=True)
plt.close()  # 关闭当前图,避免影响后续绘图# 无间隔
sns.jointplot(x=df["sepal_length"], y=df["sepal_width"], kind='kde',color="blue", space=0)
plt.savefig("P150边际图7.png", dpi=600, bbox_inches='tight', transparent=True)
plt.close()  # 关闭当前图,避免影响后续绘图# 大间隔
sns.jointplot(x=df["sepal_length"], y=df["sepal_width"], kind='kde',color="blue", space=3)
plt.savefig("P150边际图8.png", dpi=600, bbox_inches='tight', transparent=True)
plt.close()  # 关闭当前图,避免影响后续绘图# 调整边际图比例
sns.jointplot(x=df["sepal_length"], y=df["sepal_width"],kind='kde', ratio=2)
plt.savefig("P150边际图9.png", dpi=600, bbox_inches='tight', transparent=True)
plt.close()  # 关闭当前图,避免影响后续绘图
边际图1
边际图2
边际图3
边际图4
边际图5
边际图6
边际图7
边际图8
边际图9

边缘为直方图的边际图

import pandas as pd
import matplotlib.pyplot as pltdf = pd.read_csv(r"E:\PythonProjects\experiments_figures\绘图案例数据\mpg_ggplot2.csv")  # 导入数据# 创建图形和网格布局
fig = plt.figure(figsize=(12, 8), dpi=80)
grid = plt.GridSpec(4, 4, hspace=0.5, wspace=0.2)# 定义坐标轴
ax_main = fig.add_subplot(grid[:-1, :-1])
ax_right = fig.add_subplot(grid[:-1, -1], xticklabels=[], yticklabels=[])
ax_bottom = fig.add_subplot(grid[-1, 0:-1], xticklabels=[], yticklabels=[])# 主图上的散点图
ax_main.scatter('displ', 'hwy', s=df.cty * 4,c=df.manufacturer.astype('category').cat.codes,alpha=.9, data=df, cmap="tab10", edgecolors='gray', linewidths=.5)# 右侧的直方图
ax_bottom.hist(df.displ, 40, histtype='stepfilled', orientation='vertical',color='blue', alpha=0.8)
ax_bottom.invert_yaxis()# 底部的直方图
ax_right.hist(df.hwy, 40, histtype='stepfilled', orientation='horizontal',color='blue', alpha=0.8)# 图形修饰
ax_main.set(title='Scatterplot with Histograms \n displ vs hwy',xlabel='displ', ylabel='hwy')
ax_main.title.set_fontsize(20)
for item in ([ax_main.xaxis.label, ax_main.yaxis.label] +ax_main.get_xticklabels() + ax_main.get_yticklabels()):item.set_fontsize(14)# 获取当前的刻度位置并设置
xlabels = ax_main.get_xticks().tolist()
ax_main.set_xticks(xlabels)
ax_main.set_xticklabels(xlabels)# 保存图片
plt.savefig("P152边缘为直方图的边际图.png", dpi=600, bbox_inches='tight', transparent=True)
plt.show()
边缘为直方图的边际图

边缘为箱线图的边际图

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as pltdf = pd.read_csv(r"E:\PythonProjects\experiments_figures\绘图案例数据\mpg_ggplot2.csv")  # 导入数据# 创建图形和网格布局
fig = plt.figure(figsize=(12, 8), dpi=80)
grid = plt.GridSpec(4, 4, hspace=0.5, wspace=0.2)# 定义坐标轴
ax_main = fig.add_subplot(grid[:-1, :-1])  # 主图的位置
ax_right = fig.add_subplot(grid[:-1, -1],xticklabels=[], yticklabels=[])  # 右侧箱线图的位置
ax_bottom = fig.add_subplot(grid[-1, 0:-1],xticklabels=[], yticklabels=[])  # 底部箱线图的位置# 主图上的散点图
ax_main.scatter('displ', 'hwy', s=df.cty * 5,c=df.manufacturer.astype('category').cat.codes,  # 根据制造商进行着色alpha=.8, data=df, cmap="Set1", edgecolors='black', linewidths=.5)
sns.boxplot(df.hwy, ax=ax_right, orient="v")  # 在右侧添加箱线图
sns.boxplot(df.displ, ax=ax_bottom, orient="h")  # 在底部添加箱线图# 图形修饰
ax_bottom.set(xlabel='')  # 移除箱线图的x轴名称
ax_right.set(ylabel='')  # 移除箱线图的y轴名称# 主标题、X轴和Y轴标签
ax_main.set(title='Scatterplot with Histograms \n displ vs hwy',xlabel='displ', ylabel='hwy')# 设置字体大小
ax_main.title.set_fontsize(20)  # 设置主标题的字体大小
for item in ([ax_main.xaxis.label, ax_main.yaxis.label] +ax_main.get_xticklabels() + ax_main.get_yticklabels()):item.set_fontsize(14)  # 设置其他组件的字体大小# 保存图片
plt.savefig("P154边缘为箱线图的边际图.png", dpi=600, bbox_inches='tight', transparent=True)
plt.show()
边缘为箱线图的边际图

曼哈顿图

from pandas import DataFrame  # 导入DataFrame模块
from scipy.stats import uniform  # 从scipy.stats模块导入uniform分布
from scipy.stats import randint  # 从scipy.stats模块导入randint分布
import numpy as np  # 导入numpy库,并简称为np
import matplotlib.pyplot as plt  # 导入matplotlib.pyplot模块,并简称为plt# 生成样本数据
df = DataFrame({'gene': ['gene-%i' % i for i in np.arange(10000)],# 创建基因名字的序列'pvalue': uniform.rvs(size=10000),  # 生成服从均匀分布的p值数据'chromosome': ['ch-%i' % i for i in randint.rvs(0, 12, size=10000)]})
# 生成随机的染色体编号# 计算-log10(pvalue)
df['minuslog10pvalue'] = -np.log10(df.pvalue)
# 计算-p值的负对数,用于曼哈顿图的纵轴
df.chromosome = df.chromosome.astype('category')  # 将染色体列转换为分类类型
df.chromosome = df.chromosome.cat.set_categories(['ch-%i' % i for i in range(12)], ordered=True)  # 对染色体进行排序
df = df.sort_values('chromosome')  # 根据染色体排序# 准备绘制曼哈顿图
df['ind'] = range(len(df))  # 为数据集添加索引列
df_grouped = df.groupby(('chromosome'), observed=False)  # 按染色体分组# 绘制曼哈顿图
fig = plt.figure(figsize=(14, 8))  # 设置图形大小
ax = fig.add_subplot(111)  # 添加子图
colors = ['darkred', 'darkgreen', 'darkblue', 'gold']  # 定义颜色列表
x_labels = []  # 初始化x轴标签列表
x_labels_pos = []  # 初始化x轴标签位置列表
for num, (name, group) in enumerate(df_grouped):  # 遍历分组后的数据group.plot(kind='scatter', x='ind', y='minuslog10pvalue',color=colors[num % len(colors)], ax=ax)  # 绘制散点图,并按染色体着色x_labels.append(name)  # 添加染色体名到标签列表x_labels_pos.append((group['ind'].iloc[-1] -(group['ind'].iloc[-1] - group['ind'].iloc[0]) / 2))  # 添加染色体标签的位置
ax.set_xticks(x_labels_pos)  # 设置x轴刻度位置
ax.set_xticklabels(x_labels)  # 设置x轴刻度标签ax.set_xlim([0, len(df)])  # 设置x轴范围
ax.set_ylim([0, 3.5])  # 设置y轴范围
ax.set_xlabel('Chromosome')  # 设置x轴标签# 保存图片
plt.savefig("P159曼哈顿图.png", dpi=600, bbox_inches='tight', transparent=True)
plt.show()
曼哈顿图
http://www.xdnf.cn/news/20344.html

相关文章:

  • 【Python自动化】 21 Pandas Excel 操作完整指南
  • 小杰机器学习(two)——导数、损失函数、斜率极值最值、微分规则、切平面与偏导数、梯度。
  • Rust 登堂 之 Deref 解引用(十)
  • 一文掌握工业缺陷检测项目实战(Pytorch算法训练、部署、C++ DLL制作、Qt集成)
  • 微信小程序(uniapp)实现连接蓝牙
  • cuda-NCCL笔记(1)-- 初步了解使用NCCL
  • Python 多线程与多进程入门指南
  • Windows 设备音频录制 | WASAPI 音频数据采集 / 环回录制
  • 【基础-单选】singleton模式下首次进入的执行顺序是
  • C++趣味编程:鸡兔同笼与票务计算
  • cocos2d. 3.17.2 c++如何实现下载断点续传zip压缩包带进度条
  • 【VoNR】VoNR 不等于 VoLTE on 5G
  • vcenter管理的4台安装了esxi机器组成的HA,故障后自恢复理解
  • 飞牛NAS配置FRP内网穿透:实现远程访问
  • DocuAI深度测评:自动文档生成工具如何高效产出规范API文档与数据库表结构文档?
  • 【教学类-36-10】20240905(通义万相)-A4各种大小的鱼制作“吐泡泡的鱼”01版
  • Python反向迭代完全指南:从基础到高性能系统设计
  • C++从入门到精通(视频教程)
  • More Effective C++ 条款30:代理类
  • 2025高中文凭能考的证书大全
  • 2021/07 JLPT听力原文 问题一 4番
  • 第八章 惊喜05 笑笑点评团队
  • Claude Code成本浪费严重?80%开支可省!Token黑洞解密与三层省钱攻略
  • 使用YOLO11训练鸟类分类模型
  • AI应用开发-技术架构 PAFR介绍
  • JS魔法中介:Proxy和Reflect为何形影不离?
  • 【1】MOS管的结构及其工作原理
  • Linux系统: docker安装RagFlow教程
  • 【工具变量】上市公司企业海外业务收入数据集(2003-2024年)
  • C++ map和set