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()
![image](https://img2022.cnblogs.com/blog/2748549/202202/2748549-20220214213218056-1600863672.png)

绘制多个类型多个颜色的散点图

点击查看代码
# 绘制多个颜色多分类

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()
![image](https://img2022.cnblogs.com/blog/2748549/202202/2748549-20220214214357828-214399303.png)

如果我们希望显示多种颜色的散点图,并且这个颜色是我们标签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()
![image](https://img2022.cnblogs.com/blog/2748549/202202/2748549-20220214215413350-553901120.png)

找出数据颜色、图例和颜色的列表

使用数据集
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()
![image](https://img2022.cnblogs.com/blog/2748549/202202/2748549-20220214225757416-155352465.png)
posted @   王二狗喵喵喵  阅读(105)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示