Jupyter Notebook 绘制散点图

目录

前言

一、绘制散点图:

二、基础散点图

三、小型散点图

四、简单水平分类散点图

总结

(1)散点图优点:

(2)散点图缺点:


前言

        散点图是指在回归分析中,数据点在直角坐标系平面上的分布图,散点图表示因变量随自变量变化的大致趋势,据此可以选择合适的函数对数据点进行拟合

用两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是否存在某种关联或总结坐标点的分布模式。散点图将序列显示为一组点。值由点在图表中的位置表示。类别由图表中的不同标记表示。散点图通常用于比较跨类别的聚合数据。

散点图适用以下场景:

  1. 回归分析:在回归分析中,散点图用于表示因变量随自变量而变化的大致趋势,据此可以选择合适的函数对数据点进行拟合。这种图表形式可以帮助研究者或数据分析师识别变量之间的线性或非线性关系,包括正相关、负相关和无关。

  2. 相关性分析:通过观察散点图上数据点的分布情况,可以推断出变量间的相关性。如果变量之间不存在相互关系,那么在散点图上就会表现为随机分布的离散的点;如果存在某种相关性,那么大部分的数据点就会相对密集并以某种趋势呈现。

  3. 比较跨类别的聚合数据:散点图通常用于比较不同类别之间的聚合数据,通过颜色的变化或其他视觉元素,可以将不同组的数据点区分开来,从而比较不同组之间的差异和关系。

  4. 多变量关系的可视化:在散点图的基础上,可以通过添加额外的维度来展示更多的信息。例如,可以使用颜色、点的大小或形状来表示第三个变量的取值,从而在同一个图表中展示三个变量之间的关系。

  5. 趋势线的添加:在基本散点图的基础上,可以添加趋势线来显示变量之间的线性关系。趋势线是通过拟合数据点而得到的一条直线,用于表示变量之间的趋势和关联程度。

一、绘制散点图:

matplotlib绘制散点图主要使用pie()函数

绘制散点图代码如下:

import matplotlib.pyplot as plt  
import numpy as np  
  
# 创建数据  
x = np.random.rand(50)  
y = np.random.rand(50)  
  
# 绘制散点图  
plt.scatter(x, y)  
plt.xlabel('X 轴')  
plt.ylabel('Y 轴')  
plt.title('散点图示例')  
plt.show()

运行结果如下:

二、基础散点图

工作中应用散点图分析数据,通过导入外部数据进行分析绘图

例:导入外部数据:2001-2019年劳动力与就业人员数据.npz,通过散点图分析各年劳动力与就业人员数据情况。

代码如下:

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']='simHei'
plt.rcParams['axes.unicode_minus']=False
data=np.load('2001-2019年劳动力与就业人员数据.npz',encoding='ASCII',allow_pickle=True)
columns=data['arr_0']
values=data['arr_1']
plt.figure(figsize=(9,6),dpi=1080)
plt.scatter(values[:,0],values[:,1],marker='o')
plt.xlabel('年份')
plt.ylabel('人数(万人)')
plt.ylim(70000,85000)
plt.xticks(range(2001,2020,1),labels=values[:,0])
plt.title('故事图')
plt.show()

解释代码:

  1. 导入必要的库:

python复制代码

import numpy as np
import matplotlib.pyplot as plt

这里导入了NumPy库(通常用于数值计算)和matplotlib.pyplot库(用于绘制图形和图表)。

  1. 设置中文显示:

python复制代码

plt.rcParams['font.sans-serif']='simHei'
plt.rcParams['axes.unicode_minus']=False

这两行代码用于设置matplotlib的参数,以确保在图表中可以正确显示中文和负号。simHei是一种常用于显示中文的字体。

  1. 加载数据:

python复制代码

data=np.load('2001-2019年劳动力与就业人员数据.npz',encoding='ASCII',allow_pickle=True)

使用NumPy的load函数加载一个名为2001-2019年劳动力与就业人员数据.npz的NumPy压缩文件。这个文件应该包含以pickle格式存储的数组。但是,通常.npz文件不需要encoding参数,因为它是二进制格式。而allow_pickle=True是必需的,因为.npz文件可能包含pickle对象。

  1. 从加载的数据中获取列名和值:

python复制代码

columns=data['arr_0']
values=data['arr_1']

从加载的data对象中,我们获取名为arr_0的列名(可能是一个字符串数组)和名为arr_1的数据值(可能是一个二维数组或类似结构)。

  1. 设置图形大小和分辨率:

python复制代码

plt.figure(figsize=(9,6),dpi=1080)

这行代码设置了图形的大小(宽度为9英寸,高度为6英寸)和分辨率(每英寸1080点)。

  1. 绘制散点图:

python复制代码

plt.scatter(values[:,0],values[:,1],marker='o')

使用scatter函数绘制散点图。这里假设values[:,0]是x轴的数据(年份),values[:,1]是y轴的数据(人数)。每个数据点都用一个圆(由marker='o'指定)表示。

  1. 设置x轴和y轴的标签:

python复制代码

plt.xlabel('年份')
plt.ylabel('人数(万人)')

这两行代码分别设置了x轴和y轴的标签。

  1. 设置y轴的范围:

python复制代码

plt.ylim(70000,85000)

这行代码设置了y轴的范围,从70000到85000。

  1. 设置x轴的刻度标签:

python复制代码

plt.xticks(range(2001,2020,1),labels=values[:,0])

这里似乎有一个问题。xticks函数的第一个参数是刻度位置,第二个参数是相应的标签。但是,通常年份的标签是字符串,而不是从values[:,0]获取的数值。您可能想要创建一个与年份数值相对应的标签列表。但在这里,它尝试将values[:,0]作为标签使用,这可能不是您想要的。

  1. 设置图表的标题:

python复制代码

plt.title('故事图')

三、小型散点图

可以理解为精确的散点图

如上述外部数据导入

得代码如下:

from matplotlib import pyplot as plt
import pandas as pd 
import seaborn as sns
plt.rcParams['font.sans-serif']='simHei'
sns.set_style({'font.sans-serif':['SimHei','Arial']})
hr =pd.read_csv('hr.csv',encoding='gbk')
data=hr.head(100)
color_map=dict(zip(data['薪资'].unique(),['b','y','r']))
for species,group in data.groupby('薪资'):plt.scatter(group['每月平均工作小时数(小时)'],group['满意度'],color=color_map[species],alpha=0.4,edgecolors=None,label=species)
plt.legend(frameon=True,title='薪资')
plt.xlabel('每月')
plt.ylabel('水平')
plt.title('平均时间')
plt.show()

解释代码:

  1. 导入必要的库

python复制代码

from matplotlib import pyplot as plt
import pandas as pd
import seaborn as sns

这三行代码分别导入了matplotlibpyplot模块(用于绘图)、pandas库(用于数据处理)和seaborn库(用于数据可视化)。

  1. 设置字体样式

python复制代码

plt.rcParams['font.sans-serif']='simHei'
sns.set_style({'font.sans-serif':['SimHei','Arial']})

这两行代码用于设置图表中的字体样式,确保中文字符能够正确显示。simHeiSimHei是支持中文显示的字体。

  1. 读取数据

python复制代码

hr = pd.read_csv('hr.csv',encoding='gbk')

使用pandasread_csv函数读取名为hr.csv的CSV文件,并指定编码为gbk(通常用于处理包含中文字符的CSV文件)。

  1. 选择部分数据

python复制代码

data = hr.head(100)

从读取的hr数据集中选择前100行数据。

  1. 定义颜色映射

python复制代码

color_map = dict(zip(data['薪资'].unique(), ['b', 'y', 'r']))

这里假设薪资列包含几个不同的薪资水平。unique()方法用于获取该列中所有唯一的薪资值,然后使用zip函数将这些薪资值与颜色(蓝、黄、红)组合成一个字典。但是,这里有一个潜在的问题:如果薪资列中有超过三种不同的薪资水平,则只有前三种会被映射到颜色上,其他薪资水平将不会被显示。

  1. 绘制散点图

python复制代码

for species, group in data.groupby('薪资'):
plt.scatter(group['每月平均工作小时数(小时)'], group['满意度'], color=color_map[species], alpha=0.4, edgecolors=None, label=species)

使用groupby方法按薪资列对数据进行分组,并为每个薪资组绘制一个散点图。散点图的x轴是每月平均工作小时数(小时),y轴是满意度。每个薪资组都使用color_map字典中指定的颜色进行绘制。alpha参数用于设置点的透明度,edgecolors=None表示不绘制点的边缘。

  1. 添加图例

python复制代码

plt.legend(frameon=True, title='薪资')

为图表添加一个图例,其中frameon=True表示图例有一个框,title='薪资'设置了图例的标题。

  1. 设置坐标轴标签和图表标题

python复制代码

plt.xlabel('每月')
plt.ylabel('水平')
plt.title('平均时间')

这里设置了x轴和y轴的标签以及图表的标题。但是,这些标签和标题可能不够准确或清晰。例如,x轴标签应该是“每月平均工作小时数”或类似的描述,y轴标签应该是“满意度”,图表标题应该更具体地描述图表的内容。

  1. 显示图表

python复制代码

plt.show()

最后,这行代码用于显示绘制的图表:

四、简单水平分类散点图

分类水平散点图(或称为分组散点图)通常用于显示不同类别或分组之间的数据点分布。在Python中,我们可以使用matplotlibpandas库来创建这样的图表

工作薪资与时间简单水平散点图

代码如下:

python
import pandas as pd  
import matplotlib.pyplot as plt  
  
# 假设我们有以下数据  
data = {  
    '薪资': ['低', '中', '高', '低', '中', '高', '低', '中', '高'],  
    '每月平均工作小时数(小时)': [160, 180, 200, 150, 185, 210, 170, 190, 220],  
    '满意度': [0.8, 0.7, 0.6, 0.9, 0.8, 0.5, 0.75, 0.65, 0.55]  
}  
  
# 将数据转换为DataFrame  
df = pd.DataFrame(data)  
  
# 设置图形大小和样式  
plt.figure(figsize=(10, 6))  
  
# 遍历薪资类别,为每个类别绘制散点图  
colors = ['blue', 'orange', 'green']  # 为每个薪资类别定义颜色  
for i, (name, group) in enumerate(df.groupby('薪资')):  
    plt.scatter(group['每月平均工作小时数(小时)'], group['满意度'], label=name, color=colors[i], alpha=0.6)  
  
# 添加图例  
plt.legend(title='薪资')  
  
# 设置坐标轴标签和图表标题  
plt.xlabel('每月平均工作小时数(小时)')  
plt.ylabel('满意度')  
plt.title('薪资与满意度关系图')  
  
# 显示网格  
plt.grid(True)  
  
# 显示图表  
plt.show()

解释代码如下:

  1. 导入必要的库

python复制代码

import pandas as pd
import matplotlib.pyplot as plt

这里导入了pandas库(常用别名pd)来处理数据,并导入了matplotlib.pyplot库(常用别名plt)来绘制图表。

2定义数据

python复制代码

data = {
'薪资': ['低', '中', '高', '低', '中', '高', '低', '中', '高'],
'每月平均工作小时数(小时)': [160, 180, 200, 150, 185, 210, 170, 190, 220],
'满意度': [0.8, 0.7, 0.6, 0.9, 0.8, 0.5, 0.75, 0.65, 0.55]
}

这里定义了一个字典data,它包含了三个键:'薪资''每月平均工作小时数(小时)''满意度'。每个键对应一个列表,这些列表包含了相应的数据。

3将数据转换为DataFrame

python复制代码

df = pd.DataFrame(data)

使用pandasDataFrame构造函数将字典data转换为DataFrame对象df

4设置图形大小和样式(可选):

python复制代码

plt.figure(figsize=(10, 6))

使用plt.figure()函数设置图形的大小为10x6英寸。

5绘制散点图

python复制代码

colors = ['blue', 'orange', 'green'] # 为每个薪资类别定义颜色
for i, (name, group) in enumerate(df.groupby('薪资')):
plt.scatter(group['每月平均工作小时数(小时)'], group['满意度'], label=name, color=colors[i], alpha=0.6)

复制代码

* 定义一个颜色列表`colors`,为每个薪资类别指定一个颜色。
* 使用`df.groupby('薪资')`按`'薪资'`列对数据进行分组。
* 使用`enumerate()`函数遍历分组,其中`name`是薪资类别的名称,`group`是该类别下的数据子集。
* 对于每个分组,使用`plt.scatter()`函数绘制散点图。`group['每月平均工作小时数(小时)']`和`group['满意度']`分别作为x轴和y轴的数据。`label=name`设置图例的标签,`color=colors[i]`设置散点的颜色,`alpha=0.6`设置散点的透明度。

6. 添加图例

python复制代码

plt.legend(title='薪资')

使用plt.legend()函数添加图例,并设置图例的标题为'薪资'

7设置坐标轴标签和图表标题

python复制代码

plt.xlabel('每月平均工作小时数(小时)')
plt.ylabel('满意度')
plt.title('薪资与满意度关系图')

使用plt.xlabel()plt.ylabel()函数设置x轴和y轴的标签。使用plt.title()函数设置图表的标题。

8显示网格(可选):

python复制代码

plt.grid(True)

使用plt.grid(True)函数在图表上显示网格线。

9显示图表

python复制代码

plt.show()

使用plt.show()函数显示图表。

总的来说,这段代码的目的是根据薪资类别绘制一个散点图,展示不同薪资水平下员工的每月平均工作小时数和满意度之间的关系。

总结

散点图用两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是否存在某种关联或总结坐标点的分布模式,有优点与缺点

(1)散点图优点:

直观表现出影响因素和预测对象之间的总体关系趋势;能通过直观醒目的图形方式,反映变量间的形态变化关系情况,以便于来模拟变量之间的关系

(2)散点图缺点:

散点图看上去比较乱,基本上只能看相关、分布和聚合,其他信息均不能很好展现。散点图需要有足够多的数据点,并且数据之间有相关性时才能呈现很好的结果。

  • 12
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要在Jupyter Notebook绘制散点图,您可以使用Python的matplotlib库。以下是一个简单的示例代码,用于绘制x和y坐标的散点图: ```python import matplotlib.pyplot as plt # 定义x和y坐标 x = [1, 2, 3, 4, 5] y = [2, 4, 6, 8, 10] # 绘制散点图 plt.scatter(x, y) # 添加标题和标签 plt.title('Scatter Plot Example') plt.xlabel('X-axis') plt.ylabel('Y-axis') # 显示图形 plt.show() ``` 您可以根据需要更改x和y坐标的值,并使用不同的参数自定义散点图。 ### 回答2: Jupyter Notebook是一个基于云的笔记本应用程序,可实现互动计算。在Jupyter Notebook中,可以利用Python语言编写代码,并支持多种数据可视化方式。其中,散点图是一种用来表示两个变量之间关系的常见图表类型,适用于探究变量之间的关联性,查找异常值等。 在Jupyter Notebook绘制散点图可以借助Python的matplotlib库和seaborn库。下面是一个绘制散点图的示例代码: 首先,运行下面的代码以导入需要的库和数据集: ```python import matplotlib.pyplot as plt import seaborn as sns # 导入tips数据集 tips = sns.load_dataset('tips') ``` 然后,使用scatter()函数绘制散点图。scatter()函数的基本语法如下: ```python plt.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, edgecolors=None, *, plotnonfinite=False, data=None, **kwargs) ``` 其中,x和y表示两个要绘制的变量,s表示点的大小,c表示点的颜色,marker表示点的形状,alpha表示点的透明度等参数。 以下是一个绘制散点图的示例代码: ```python # 绘制total_bill和tip之间的散点图 plt.scatter(tips['total_bill'], tips['tip'], s=50, c='blue', alpha=0.5, edgecolors='none') # 添加图表标题,设置x轴和y轴标签 plt.title('Total Bill vs Tip') plt.xlabel('Total Bill') plt.ylabel('Tip') # 显示图表 plt.show() ``` 绘制散点图后,可以根据需要对图表进行优化,如添加图例、调整点的大小和颜色等。此外,还可以使用seaborn库绘制带有回归曲线的散点图和矩阵散点图等更高级的散点图。在进行数据分析和可视化时,灵活使用散点图是非常有用的。 ### 回答3: Jupyter Notebook 是一种常用的交互式笔记本工具,可以用于数据分析、数据可视化、机器学习等多种任务。其中一个重要的功能就是绘制数据可视化图表,比如散点图散点图可以用来表示两个变量之间的关系,是数据分析中常用的一种图表。 首先,我们需要加载绘图工具库 matplotlib,可以通过以下代码实现: ```python %matplotlib inline import matplotlib.pyplot as plt ``` 其中 `%matplotlib inline` 表示将 matplotlib 绘图结果内嵌在 notebook 中。 接下来,我们先随机生成一些数据来绘制散点图: ```python import numpy as np # 随机生成 50 个数据点 x = np.random.rand(50) y = np.random.rand(50) ``` 然后,我们可以使用 `plt.scatter()` 函数来绘制散点图。下面是一个基本的绘制示例: ```python plt.scatter(x, y) plt.show() ``` 运行后,我们就可以在 notebook 中看到一个简单的散点图。如果需要对散点图进行一些调整,比如颜色、大小等,则可以传入一些额外的参数。例如,我们可以将散点的颜色改为红色,大小改为 50: ```python plt.scatter(x, y, c='red', s=50) plt.show() ``` 除了使用纯色之外,还可以使用颜色映射(color map)来显示数据之间的关系。例如,我们可以根据数据点的 y 值来自动设定颜色: ```python colors = y plt.scatter(x, y, c=colors, cmap='viridis') plt.colorbar() plt.show() ``` 这里的 `cmap` 参数指定了使用的颜色映射,`colorbar` 函数则显示了颜色与属性值之间的对应关系。 除了散点图之外,Jupyter Notebook 还支持许多其他的图表类型,如条形图、线图、饼图等,这些图表的绘制方式与散点图也有类似之处。通过将数据可视化,我们可以更好地理解数据之间的关系,为数据分析提供更多的支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值