# 如何使用Python matplotlib绘制散点图

> 作者/来源: UCloud 运营管理员
> 发布时间: 2022-10-10T07:04:00.000Z
> 分类: 其他
> 标签: AI, Python
> 原文链接: http://117.50.162.249:3000/yun/articles/2369

---

# 如何使用Python matplotlib绘制散点图

> 来源: https://www.ucloud.cn/yun/127977.html
> 作者: 89542767
> 发布日期: 发布于2022-10-10 15:04

今天给大家分享一个经典案例，那就是在Python matplotlib，如何完整的绘制成功一个散点图，其实，如果想要绘制的话，还是比较麻烦的。但是如果我们使用Python matplotlib的话，绘制的就会比较好，怎么绘制呢？下面就给大家详细的解答下。

**什么是散点图？**

　　所谓的散点图，指的是在相关的数据分析当中，数据会依次分布在直角坐标系当中，散点图是变量跟着自变量去进行变动，据此可以选择合适的函数对数据点进行拟合。

　　用组成的数据，做成数据的相关集合点，考察相关坐标点的一个分布情况，判断两变量之间是否存在某种关联或总结坐标点的分布模式。

　　散点图将序列显示为一组点。值由点在图表中的位置表示。类别由图表中的不同标记表示。散点图通常用于比较跨类别的聚合数据。

**下面给出一个散点图的具体代码案例**

```
　　import matplotlib.pyplot as plt
　　import pandas as pd
　　import numpy as np
　　plt.figure(figsize=(9,5),#(宽度,高度)单位inch
　　dpi=120,#清晰度dot-per-inch
　　#facecolor='#CCCCCC',#画布底色
　　#edgecolor='black',linewidth=0.2,frameon=True,#画布边框
　　#frameon=False#不要画布边框
　　)
　　#设置全局中文字体
　　plt.rcParams['font.sans-serif']='KaiTi'#设置全局字体为中文楷体
　　plt.rcParams['axes.unicode_minus']=False#不使用中文减号
　　#读取数据
　　crime=pd.read_csv("crimeRatesByState2005.csv")
　　print(list(crime.murder))#转化成列表
　　#删除state为United States的数据
　　crime2=crime[crime.state!="United States"]
　　#删除state为District of Columbia的数据
　　crime2=crime2[crime2.state!="District of Columbia"]
　　z=list(crime2.population/10000)#取人口数据
　　#colors=np.random.rand(len(list(crime2.murder)))#根据谋杀率随机去颜色
　　cm=plt.cm.get_cmap('RdYlBu')#使用色谱RdYlBu
　　plt.scatter(list(crime2.murder),list(crime2.burglary),s=z,c=z,cmap=cm,linewidth=0.5,alpha=0.5)#绘制散点图
　　plt.xlabel("murder")
　　plt.ylabel("burglary")
　　plt.show()
```

![01.png](https://ucloud-blog.cn-bj.ufileos.com/articles/127977/images/127977_000.png)

　　散点图一行代码显示

```
　　#读取数据
　　df=pd.read_csv('iris.csv')
　　#平面坐标系的位置只能表示2维数据
　　x=df['sepal_length']
　　y=df['sepal_width']
　　#根据X，Y值画散点图
　　plt.scatter(x,y)
```

![02.png](https://ucloud-blog.cn-bj.ufileos.com/articles/127977/images/127977_001.png)

　　加颜色的散点图

```
　  #读取数据
　　df=pd.read_csv('iris.csv')
　　#平面坐标系的位置只能表示2维数据
　　x=df['sepal_length']
　　y=df['sepal_width']
　　c=df['species'].map({'setosa':'r','versicolor':'g','virginica':'b'})
　　#根据X，Y值画散点图,用不同的颜色标识不同的分类
　　plt.scatter(x,y,c=c)
```

![03.png](https://ucloud-blog.cn-bj.ufileos.com/articles/127977/images/127977_002.png)

　　颜色深浅表示数值大小

```
　　#读取数据
　　df=pd.read_csv('iris.csv')
　　#平面坐标系的位置只能表示2维数据
　　x=df['sepal_length']
　　y=df['sepal_width']
　　c=df['petal_length']
　　#根据X，Y值画散点图,用颜色的深浅表示花萼的长度
　　plt.scatter(x,y,c=c,cmap=plt.cm.RdYlBu)
```

![04.png](https://ucloud-blog.cn-bj.ufileos.com/articles/127977/images/127977_003.png)

　　散点图显示颜色和大小

```
　　#读取数据
　　df=pd.read_csv('iris.csv')
　　#平面坐标系的位置只能表示2维数据
　　x=df['sepal_length']#x轴坐标
　　y=df['sepal_width']#y轴坐标
　　c=df['petal_length']#颜色color
　　s=df['petal_width']#大小size
　　#根据X，Y值画散点图,用颜色的深浅表示花萼的长度，用大小表示花萼的宽度
　　plt.figure(figsize=(5,5),dpi=100)
　　#plt.scatter(x,y,c=c,s=50)#可以是标量，那么所有的点都一样
　　plt.scatter(x,y,c=c,s=s*30)
```

![05.png](https://ucloud-blog.cn-bj.ufileos.com/articles/127977/images/127977_004.png)

　　自定义图表散点图

```
　　#读取数据
　　df=pd.read_csv('iris.csv')
　　def get_xycs(df):
　　#平面坐标系的位置只能表示2维数据
　　x=df['sepal_length']#x轴坐标
　　y=df['sepal_width']#y轴坐标
　　c=df['petal_length']#颜色color
　　s=df['petal_width']#大小size
　　return x,y,c,s
　　markers={'setosa':'o','versicolor':'D','virginica':'*'}
　　#根据X，Y值画散点图,用颜色的深浅表示花萼的长度，用大小表示花萼的宽度,每组数据只能是一种点样式
　　plt.figure(figsize=(5,5),dpi=100)
　　#plt.scatter(x,y,c=c,s=50)#可以是标量，那么所有的点都一样
　　for sp in df['species'].unique():
　　x,y,c,s=get_xycs(df[df['species']==sp])
　　plt.scatter(x,y,c=c,s=s*30,cmap=plt.cm.seismic,marker=markers[sp],label=sp)
　　plt.legend()
```

![06.png](https://ucloud-blog.cn-bj.ufileos.com/articles/127977/images/127977_005.png)

　　散点图万能模板

```
　　#读取数据
　　df=pd.read_csv('iris.csv')
　　def get_xycs(df):
　　#平面坐标系的位置只能表示2维数据
　　x=df['sepal_length']#x轴坐标
　　y=df['sepal_width']#y轴坐标
　　c=df['petal_length']#颜色color
　　s=df['petal_width']#大小size
　　return x,y,c,s
　　markers={'setosa':'o','versicolor':'D','virginica':'*'}
　　#根据X，Y值画散点图,用颜色的深浅表示花萼的长度，用大小表示花萼的宽度,每组数据只能是一种点样式
　　plt.figure(figsize=(5,5),dpi=100)
　　#plt.scatter(x,y,c=c,s=50)#可以是标量，那么所有的点都一样
　　for sp in df['species'].unique():
　　x,y,c,s=get_xycs(df[df['species']==sp])
　　plt.scatter(x,y,s=s*30,cmap=plt.cm.seismic,marker=markers[sp],label=sp)
　　plt.legend()
```

![07.png](https://ucloud-blog.cn-bj.ufileos.com/articles/127977/images/127977_006.png)

　　其他模板

```
　　###在二维坐标系上，位置表示(x,y)二维数据
　　x=df.sepal_length#x表示花瓣长
　　y=df.sepal_width#y表示花瓣宽
　　s=(df.petal_length*df.petal_width)*np.pi#s(size)表示花萼面积
　　c=(df.petal_length*df.petal_width)*np.pi
　　plt.scatter(x,y,s=s*5,c=c,cmap=plt.cm.RdYlBu_r)
　　plt.xlabel('sepal_length')
　　plt.ylabel('sepal_width')
```

![08.png](https://ucloud-blog.cn-bj.ufileos.com/articles/127977/images/127977_007.png)

```
　  #在二维坐标系上，位置表示(x,y)二维数据
　　x=df.sepal_length#x表示花瓣长
　　y=df.sepal_width#y表示花瓣宽
　　s=(df.petal_length*df.petal_width)*np.pi#s(size)表示花萼面积
　　#print(df.species)
　　#colormap={"setosa":"#FF0000","versicolor":"green","virginica":"b"}#定义一个字典将species字符串映射到颜色字符串上
　　colormap={"setosa":1,"versicolor":5,"virginica":6}#定义一个字典将species字符串映射到颜色字符串上
　　c=df.species.map(colormap)
　　#print(c)
　　plt.scatter(x,y,s=s*5,c=c,cmap=plt.cm.coolwarm,alpha=0.7,edgecolors='face')
　　plt.xlabel('sepal_length')
　　plt.ylabel('sepal_width')
```

![09.png](https://ucloud-blog.cn-bj.ufileos.com/articles/127977/images/127977_008.png)

```
  　plt.scatter(df['burglary'],df['larceny_theft'],
　　s=df['population']*2e-5,
　　c=df['motor_vehicle_theft'],cmap=plt.cm.coolwarm,
　　edgecolors='b',
　　alpha=0.75)
　　for idx,statename in df['state'].items():
　　plt.text(x=df['burglary'][idx],y=df['larceny_theft'][idx]-df['population'][idx]*2e-5*0.5,s=statename,fontsize=6,ha='center',va='top')
　　df.plot.scatter(x='burglary',y='larceny_theft',c='motor_vehicle_theft',cmap=plt.cm.coolwarm,s=df['population']*2e-5)
　　for i in df.index:
　　if i in top5_motor_theft_index:#偷车贼最多的5个州
　　plt.text(df.loc[i,'burglary']+10,df.loc[i,'larceny_theft']-10,df.loc[i,'state'],color='red')#一个文本框
```

![12.png](https://ucloud-blog.cn-bj.ufileos.com/articles/127977/images/127977_009.png)