跟着GPT学做图:Python 抖动散点图

文摘   2024-08-19 17:04   德国  

跟着GPT学做图:Python 抖动散点图

抖动散点图(Jitter Plot),是一种在散点图的基础上,通过在数据点位置上添加随机抖动(jitter)以避免数据点重叠的方法。它主要用于处理分类数据,特别是在一个类别中的数据点数量较多且容易重叠的情况下尤为有效。

抖动散点图

你好,抖动散点图!

在我们开始画图之前,让我们先花一点时间了解一下抖动散点图都能为我们做什么以及使用它的时候有没有什么需要注意的事情。

抖动散点图的主要特点

  • 减少重叠:通过在X轴(或Y轴)方向上添加微小的随机扰动,使得数据点更加分散,避免了重叠。
  • 保留数据分类特征:尽管添加了抖动,数据点仍然保留了其原有的分类特征,类别信息不会丢失。
  • 增强数据的可视化效果:使得数据点更加清晰、易于区分,尤其是在展示离散数据和分类数据时。

抖动散点图的优点

  • 提高数据点可见性:通过减少重叠,使得每个数据点在图表中更加清晰可见。
  • 增强数据比较能力:有助于在分类变量的情况下比较不同类别的数据分布。
  • 简单易用:容易实现,只需要在绘制散点图时添加抖动参数。

抖动散点图的缺点

  • 引入随机噪声:抖动是随机的,可能会引入一些噪声,使得数据点看起来不如原始数据那么精确。
  • 理解难度:对于不熟悉这种图表的人,可能会误解数据的实际分布,因为抖动使数据点偏离了其真实位置。
  • 一致性问题:由于抖动是随机的,每次生成的图表可能会有所不同,可能导致数据解释的一致性问题。

适用场景

  • 分类数据可视化:特别适用于显示分类数据中每个类别的数据点分布。
  • 高密度数据:在数据点密度较高且容易重叠的情况下,抖动散点图能有效提高可读性。

开始画图啦!

在初步认识了抖动散点图的特点和优缺点之后,让我们试着做一张抖动散点图吧!

数据介绍

抖动散点图可以用来展示大部分的分类数据,所以我认为选择某族特定数据将不利于我展示如何绘制抖动散点图。所以一下的代码部分使用的数据都是随机生成的分类数据。其中X代表类别,Y代表数据。

导入环境

import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
import pandas as pd

普通散点图

np.random.seed(42)
data = pd.DataFrame({
    'x': np.repeat(np.arange(1, 6), 1000),
    'y': np.concatenate([np.random.normal(loc, 5, 1000) for loc in range(1, 6)])
})


# Create a combined jitter and box plot with enhanced features and different colors for each x value
plt.figure(figsize=(14, 7))


# Overlay the jitter plot (strip plot)
sns.stripplot(x='x', y='y', data=data, jitter=False, size=5, alpha=0.5, palette='bright', edgecolor='white')

# Add title and labels
plt.title('Enhanced Jitter and Box Plot of y vs x with Colors', fontsize=16)
plt.xlabel('X', fontsize=14)
plt.ylabel('Y', fontsize=14)

# Show grid
plt.grid(True)

# Show the plot
plt.show()
普通散点图

抖动散点图

np.random.seed(42)
data = pd.DataFrame({
    'x': np.repeat(np.arange(1, 6), 1000),
    'y': np.concatenate([np.random.normal(loc, 5, 1000) for loc in range(1, 6)])
})


# Create a combined jitter and box plot with enhanced features and different colors for each x value
plt.figure(figsize=(14, 7))


# Overlay the jitter plot (strip plot)
sns.stripplot(x='x', y='y', data=data, jitter=True, size=5, alpha=0.5, palette='bright', edgecolor='white')

# Add title and labels
plt.title('Enhanced Jitter and Box Plot of y vs x with Colors', fontsize=16)
plt.xlabel('X', fontsize=14)
plt.ylabel('Y', fontsize=14)

# Show grid
plt.grid(True)

# Show the plot
plt.show()
抖动散点图

来都来了,再学点吧!

对比普通散点图,抖动散点图可以在明显的提升数据生成图表的可读(数据量和大体分布)但是也增加了阅读难度(大部分数据不再与它们的X对其)。但是尽管抖动散点图比普通散点图更容易理解,我们并不能从我们刚刚生成的抖动散点图表里获得更多我们数据的信息。这在我们数据可视化的时候可是很头疼的一个问题,所以让我们在生成抖动散点图的基础上在挖掘一些有关我们数据的信息吧!

箱线图

这一小节的代码可以帮助你计算并在你新生成的抖动散点图上加入箱线图。帮助你更好的了解你的数据集

# Plot the colorless box plot
sns.boxplot(x='x', y='y', data=random_data, color='gray', whis=1.5, fliersize=0, boxprops=dict(alpha=0.2))

平均值和方差

这一小节的代码可以帮助你计算并在你新生成的抖动散点图上加入平均值和方差。帮助你更好的了解你的数据集

# Calculate and annotate mean and standard deviation for each group
groups = random_data['x'].unique()
for group in groups:
    group_data = random_data[random_data['x'] == group]['y']
    mean = np.mean(group_data)
    std = np.std(group_data)
    plt.text(group - 1, random_data['y'].max() - 1, f'Mean: {mean:.2f}\nStd: {std:.2f}'
             horizontalalignment='center', size='medium', color='black', weight='semibold')

注意,你可以吧plt.text()中的random_data['y'].max()-1改成random_data['y'].min()+1,从而使平均值和方差出现在你图标的底部。

抖动散点图配合箱型图和平均值和方差

更改箱线图颜色

只需改变上面代码里的color这一个参数就可以改变图中箱线图的颜色,一下是color = 'red'的输出图表。

而如果想让我们的箱线图和抖动散点图的颜色一直的话,可以使用下面的代码:

#网盘数据的探索
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
import pandas as pd
# Load the CSV file
file_path = '/content/don_data.csv'
data = pd.read_csv(file_path)

# Create a combined jitter and box plot with colorless box plot and colorful jitter plot
plt.figure(figsize=(14, 7))
# Define the color palette
palette = sns.color_palette('bright', len(data['x'].unique()))

# Plot the colorless box plot
sns.boxplot(x='x', y='y', data=data, palette=palette, whis=1.5, fliersize=0, boxprops=dict(alpha=0.5))

# Overlay the colorful jitter plot (strip plot)
sns.stripplot(x='x', y='y', data=data, jitter=True, size=5, alpha=0.5, palette='bright', edgecolor='gray')

# Add title and labels
plt.title('Enhanced Jitter and Colorless Box Plot of y vs x with Colors', fontsize=16)
plt.xlabel('X', fontsize=14)
plt.ylabel('Y', fontsize=14)

# Calculate and annotate mean and standard deviation for each group
groups = data['x'].unique()
for group in groups:
    group_data = data[data['x'] == group]['y']
    mean = np.mean(group_data)
    std = np.std(group_data)
    plt.text(group - 1, data['y'].max() - 1, f'Mean: {mean:.2f}\nStd: {std:.2f}',
             horizontalalignment='center', size='medium', color='black', weight='semibold')

# Show grid
plt.grid(True)

# Show the plot
plt.show()
变好看的图表

去除背景格线

如果大家觉得背景上的格子有些碍事的话,我们可以通过一下代码移除它。

# Remove the grid
plt.grid(False)

把它插入在plt.show之前就可以移除碍事的鸽子了。

没有格子的图表

本文作者:徐可


现在:


长按扫码关注:科研生信充电宝


10元赞赏本文,即喜欢作者~


即可直接解锁:


《跟着高分SCI学画图:GPT教你绘制地理位置数据》对应资源哦~


看到这里你还不心动吗?


赶紧关注、转发、点赞、分享,领取你的专属福利吧~



好啦,以上就是今天推文的全部内容啦!


版权声明:本文内容由互联网用户自发贡献,版权归作者所有,本公众号不拥有所有权,也不承担相关法律责任。

如果您发现本公众号中有涉嫌抄袭的内容,欢迎发送邮件至:kysxcdb@163.com 进行举报,一经查实,本公众号将立刻删除涉嫌侵权内容。



科研生信充电宝
介绍科研;介绍统计;介绍生信;
 最新文章