matplotlib学习日记——散点图
绘制一个简单的散点图
点击查看代码
# 绘制一个简单的散点图
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# 取随机数
x1 = np.random.randn(10)
x2 = x1 + x1**2 - 10
# 确定画布
plt.figure(figsize=(8,4))
# 绘图
plt.scatter(
x1,x2,
s=20, #点的尺寸大小
c='Blue', #颜色
label="Postive" #图例
)
# 装饰图形显示图例
plt.legend()
plt.show()
绘制多个类型多个颜色的散点图
点击查看代码
# 绘制多个颜色多分类
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
x = np.random.randn(10,2) # 10行,2列的数据集
y = np.array([0,0,1,1,0,1,0,1,0,0])
plt.figure(figsize=(8,4))
plt.scatter(
x[:,0],x[:,1], # 横坐标,纵坐标,切片取列
s=50,
c=y, #分类能可视化
# label=["Zero","Zero","One","One","Zero","One","Zero","One","Zero","Zero"]
)
# plt.legend()
plt.show()
如果我们希望显示多种颜色的散点图,并且这个颜色是我们标签y所代表的分类,那么我们无法让散点图显示分别代表不同颜色的图例
应当做如下优化:
在同一画布上画两个不同的散点图,分别显示各自对应图例
点击查看代码
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
x = np.random.randn(10,2) # 10行,2列的数据集
y = np.array([0,0,1,1,0,1,0,1,0,0])
plt.figure(figsize=(8,4))
# 建立颜色列表
colors = ['red','black']
# 确立标签类别
labels = ["Zero","One"]
for i in range(x.shape[1]): #x.shape是特征的数目
plt.scatter(
x[y==i,0],x[y==i,1],
c=colors[i],
label=labels[i]
)
plt.legend()
plt.show()
找出数据颜色、图例和颜色的列表
使用数据集
https://raw.githubusercontent.com/selva86/datasets/master/midwest_filter.csv
点击查看代码
# matplotlib自动生成颜色,colormap选择光谱颜色
# 例 plt.com.tab10()
# color1 = plt.cm.tab10(5.2)会报错
'''
光谱要使用二维数组
可以使用以下代码:
np.array(color1).reshape(1,-1) #reshape 增维,(1,-1)是让行上维度为1;(-1,1)是让列上维度为1
'''
color1 = plt.cm.tab10(5.2)
x1 = np.random.randn(10)
x2 = x1 + x1**2 - 10
plt.scatter(
x1,x2,
s=50,
c=np.array(color1).reshape(1,-1)
)
plt.show()
绘制完整图像
点击查看代码
# 绘制完整图像
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
midwest = pd.read_csv("midwest_filter.csv")
categories = np.unique(midwest['category'])
plt.figure(figsize=(16,10))
for i in range(len(categories)):
plt.scatter(
midwest.loc[midwest["category"]==categories[i],"area"],
midwest.loc[midwest["category"]==categories[i],"poptotal"],
s=20,
c=np.array(plt.cm.tab10(i/len(categories))).reshape(1,-1),
label=categories[i]
)
plt.legend()
plt.show()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异