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()

浙公网安备 33010602011771号