目录


【声明】:未经版权人书面许可,任何单位或个人不得以任何形式复制、发行、出租、改编、汇编、传播、展示或利用本博客的全部或部分内容,也不得在未经版权人授权的情况下将本博客用于任何商业目的。但版权人允许个人学习、研究、欣赏等非商业性用途的复制和传播。非常推荐大家学习《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()
曼哈顿图