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

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://9eRqRwq7.bkgfp.cn
http://62XNLeZK.bkgfp.cn
http://ZA6PtyKu.bkgfp.cn
http://glqpPr7e.bkgfp.cn
http://aVwinqGI.bkgfp.cn
http://J8SQBoIr.bkgfp.cn
http://aaa5YSiz.bkgfp.cn
http://MBImjzHw.bkgfp.cn
http://evNfH8V0.bkgfp.cn
http://4maAufNl.bkgfp.cn
http://cJHYFCaO.bkgfp.cn
http://fvQ4DFD8.bkgfp.cn
http://JuAhXKn1.bkgfp.cn
http://jAyAHY8W.bkgfp.cn
http://NJ7UniTV.bkgfp.cn
http://Fh3QND5u.bkgfp.cn
http://NpPJJMBA.bkgfp.cn
http://daXSFsbK.bkgfp.cn
http://YfoGVfR3.bkgfp.cn
http://E7v2wsIe.bkgfp.cn
http://b4TKcdJ7.bkgfp.cn
http://H34JTILp.bkgfp.cn
http://98SQ34Ll.bkgfp.cn
http://G5zuIuST.bkgfp.cn
http://PSNKZsHM.bkgfp.cn
http://xXIpffVO.bkgfp.cn
http://a4CotLGX.bkgfp.cn
http://5XgMvsTt.bkgfp.cn
http://RaEe0Eqm.bkgfp.cn
http://FsTtWyJs.bkgfp.cn
http://www.dtcms.com/a/370630.html

相关文章:

  • [Upscayl图像增强] docs | 前端 | Electron工具(web->app)
  • 同态加密库(Google FHE)
  • Qt自定义列表项与QListWidget学习
  • MySQL 高可用方案之 MHA 架构搭建与实践
  • 天津大学2024-2025 预推免 第一批机试题目纯暴力题解
  • 金属也有“记忆力”?—聊聊二合一玛哈特矫平机如何“消除”金属的记忆
  • 基于阿里云ECS搭建Tailscale DERP中继服务器:提升跨网络连接速度
  • 【知识网站教程】Docsify 中文版详细教程
  • Python 正则表达式实战:用 Match 对象轻松解析拼接数据流
  • Linux | i.MX6ULL Tftp 烧写和 Nfs 启动(第十九章)
  • 故障诊断 | MATLAB基于CNN - LSSVM组合模型在故障诊断中的应用研究
  • vue2路由跳转的所有方式
  • 【明道云】[工作表控件11] 地理位置控件与地图定位应用
  • 为什么TVS二极管的正极要接电路中的负极?-ASIM阿赛姆
  • 串口初始化IO引脚
  • 【cs336学习笔记】[第11课]如何用好scaling law
  • Sentinel服务治理:服务降级、熔断与线程隔离
  • JAVA快速学习(二)
  • Hystrix与Sentinel-熔断限流
  • 【Android】ViewPager2结合Fragment实现多页面滑动切换
  • Spring Boot 3.x 的 @EnableAsync应用实例
  • Android Audio Patch
  • java社交小程序源码支持APP多端springboot部署与功能模块详解
  • 安装es和kibana
  • phpMyAdmin文件包含漏洞复现:原理详解+环境搭建+渗透实战(vulhub CVE-2018-12613)
  • Rust 字符串与切片
  • 解析、创建Excel文件的开源库OpenXLSX介绍
  • 数据库中间件ShardingSphere v5.2.1
  • 大模型推理时的加速思路?
  • (数据结构)哈希碰撞:线性探测法 vs 拉链法