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

目录

散点图1

散点图2

添加线性回归线的散点图

自定义点形状的散点图

不同样式的散点图

抖动散点图

边际图

边缘为直方图的边际图

边缘为箱线图的边际图

曼哈顿图


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

散点图1

python 复制代码
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

python 复制代码
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

midwest = 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 in
          range(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

添加线性回归线的散点图

python 复制代码
import pandas as pd  # 导入pandas库并简写为pd
import matplotlib.pyplot as plt  # 导入matplotlib.pyplot模块并简写为plt
import seaborn as sns  # 导入seaborn库并简写为sns

df = 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()

添加线性回归线的散点图_添加红色线性回归线
添加线性回归线的散点图_添加半透明的红色线性回归线
添加线性回归线的散点图_自定义线性回归线的线宽、线型和颜色

自定义点形状的散点图

python 复制代码
import pandas as pd  # 导入pandas库并简写为pd
import matplotlib.pyplot as plt  # 导入matplotlib.pyplot模块并简写为plt
import seaborn as sns  # 导入seaborn库并简写为sns

df = 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()

使用标记形状"+"
定义颜色、透明度和大小

不同样式的散点图

python 复制代码
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()

散点图_着色不同的数据子集
散点图_指定标记形状
散点图_使用了调色板
散点图_自定义的调色板

抖动散点图

python 复制代码
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

df = 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()

抖动散点图

边际图

python 复制代码
import seaborn as sns  # 导入Seaborn库并简写为sns
import matplotlib.pyplot as plt  # 导入Matplotlib.pyplot库并简写为plt

df = 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

边缘为直方图的边际图

python 复制代码
import pandas as pd
import matplotlib.pyplot as plt

df = 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()

边缘为直方图的边际图

边缘为箱线图的边际图

python 复制代码
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

df = 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()

边缘为箱线图的边际图

曼哈顿图

python 复制代码
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()

曼哈顿图

相关推荐
界面开发小八哥4 小时前
数据可视化图表库LightningChart JS v8.0上线:全新图例系统 + 数据集重构
javascript·信息可视化·数据可视化·lightningchart
THMAIL4 小时前
深度学习从入门到精通 - AutoML与神经网络搜索(NAS):自动化模型设计未来
人工智能·python·深度学习·神经网络·算法·机器学习·逻辑回归
山烛4 小时前
深度学习:残差网络ResNet与迁移学习
人工智能·python·深度学习·残差网络·resnet·迁移学习
eleqi5 小时前
Python+DRVT 从外部调用 Revit:批量创建梁(2)
python·系统集成·revit·自动化生产流水线·外部访问
BYSJMG5 小时前
计算机毕设大数据方向:基于Spark+Hadoop的餐饮外卖平台数据分析系统【源码+文档+调试】
大数据·hadoop·分布式·python·spark·django·课程设计
OC溥哥9995 小时前
Flask论坛与个人中心页面开发教程完整详细版
后端·python·flask·html
Rhys..6 小时前
python + Flask模块学习 2 接收用户请求并返回json数据
python·学习·flask
Enougme6 小时前
python-虚拟试衣
python
nightunderblackcat7 小时前
新手向:Python制作贪吃蛇游戏(Pygame)
python·游戏·pygame