
看着这图确实很普通,也没有隔壁 PyEcharts 浮夸 好看的动态效果。但是其实想要画出来这个图,你需要掌握以下几个代码编辑方法:
1. 绘制散点图
2. 根据某个字段的类别填充不同的颜色
3. 绘制分类标签的图例
4. 善于利用 plt.cm 接口中的颜色光谱
5. 根据某个度量字段控制散点大小,进而做成气泡图
如果以上一条有任意一条你还不会的,就给我耐心看完(凶巴巴)
如果你都会了,那就分享给你的朋友好吗(可可爱爱)
环境说明
熊猫本次用的是 Anaconda 的 jupyter notebook 编写的本文代码。今天用到的库都是已经集成好的,无须另行安装。每个库的版本号我列在下方了。
Python :3.7.4
pandas : 1.1.4
numpy : 1.19.4
matplotlib : 3.3.2
seaborn:0.9.0
# seaborn 要求必须是 0.9.0 以上版本
可以在终端(win 系统在cmd)中运行如下代码查询自己环境中各个库的版本,如果你的版本比较低,可以运行升级代码对相应的库进行升级。
pip list #查看各个库的版本号
pip install --upgrade 库名 #升级对应库版本常规操作 import
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
#让图像可以正常显示中文
plt.rcParams['font.family']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False先学习如何绘制一个散点图
#先随机生成一组数据
x1 = np.random.randn(10)
x2 = x1 + x1**2 + 5
#生成一个画布
plt.figure(figsize=(8,4))
#绘制散点图
#本条代码传参含义
#plt.scatter(横坐标,纵坐标,散点尺寸,数据点颜色,图例)
plt.scatter(x1,x2 ,s=50,c="red",label = "Red")
#添加标题
plt.title("散点图")
#显示图例
plt.legend()
#显示绘制图形(如下图)
plt.show()
#由于数据是随机生成,每个人画出来是不一样的哦!
根据标签区别散点颜色
#随机10行,2列的数据集
X = np.random.randn(10,2)
#生成标签
y = np.array([0,0,1,1,0,1,0,1,0,0])
#添加画布
plt.figure(figsize=(8,4))
#绘制散点图
#c为颜色参数,传入 y 标签,根据 y 标签的数量自动分发不同颜色
plt.scatter(X[:,0],X[:,1],s=5,c=y,label = ["Zero","One"])
#显示图例,显示图像
plt.legend()
plt.show()成果图如下,我们很好的根据 y 标签区分了散点颜色
但是要注意到,图例并不理想。

【核心】分类标签图例
#生成控制气泡大小的特征
z = np.array([10,7,2,5,15,6,3,7,19,11])
#添加画布
plt.figure(figsize=(8,4))
#确定颜色列表
colors = ["green","black"]
#确定标签名称列表
labels = ["Zero","One"]
#代码思路:
#在上一份代码的基础上加上控制气泡大小的 s 参数。并且将 z 传入。
for i in range(X.shape[1]):
plt.scatter(X[y==i,0],X[y==i,1],c=colors[i],s=z[y==i],label = labels[i])
#设计标题
plt.title("区分标签图例")
#显示图例和图表
plt.legend()
plt.show()DADA~!

【核心】散点图>气泡图
散点图可以清晰的呈现总体样本的分布情况。
如果进阶成气泡图,便可以在此基础上增加一个维度特征。
#随机生成控制气泡大小的特征
z = np.array([10,7,2,5,15,6,3,7,19,11])
#添加画布
plt.figure(figsize=(8,4),dpi=120)
#确定颜色列表
colors = ["green","black"]
#确定标签名称列表
labels = ["Zero","One"]
#代码思路:
#在上份代码基础上加上控制气泡大小的 s 参数,并将 z 传入。
for i in range(X.shape[1]):
plt.scatter(X[y==i,0],X[y==i,1],c=colors[i],s=z[y==i]*20,label = labels[i])
#设计标题
plt.title("气泡图")
#显示图例和图表
#markerscale 参数调整图例大小
plt.legend(markerscale=0.5)
plt.show()
卖个关子 亲我 别打我
今天我们把所有技术点都讲到位了,下篇文章我们用我们今天的方法去做我们的目标图(也就是下图)。我们即将用 gitub 上一份公开数据集。是美国中西部地区城市指标,你可以后台回复 midwest 获得这份数据集。提前试试能不能利用 area 、population、popasian 自己做出来。

熊猫寄语:祝大家也能写出如诗般的代码。下课!