import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
#导入数据
midwest = pd.read_csv("midwest_filter.csv")
#查看数据
midwest.head()
midwest.columns
midwest['category']
#提取标签中的类别
categories = np.unique(midwest['category']) #去除重复值,保存唯一值
##为了标签的名称,我们就需要循环和标签的类别数目一样的次数
##所以需要循坏的次数=需要生成的标签的次数=需要生成小数的个数
##只需要在循坏中生成颜色就好了
##所以我们就利用循坏中的i生成14个小数
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()
#####对于我们想要给不同的类型添加不同的标签的做法
######列表推导式###########################
colors=[plt.cm.tab10(i/float(len(categories)-1))for i in range (len(categories))]
colors =[]
for i in range(len(categories)):
colors.append(plt.cm.tab10(i/float(len(categories)-1)))
##############################################
###丰富我们的图像
###预设图像的各种属性#####
large = 22 ;med = 16 ; small =12;
params = {
'axes.titlesize':large, #子图上标题的大小
'legend.fontsiz':med, #图列的字体的大小
'figure.figsize':(16,10), #图像的画布的大小
'axes.labelsize': med, #标签的字体大小
'xtick.labelsize': med, #x轴上标尺的字体的大小
'ytick.labelsize': med, #y轴上标尺的字体的大小
'figure.titlesize': large #整个画布的标题字体大小
}
#plt.rcParams.update(params) #设置各种各样的默认属性
#plt.style.use('seaborn-whitegird')#设定各种风格有很多属性
sns.set_style('white')#设定背景风格
###准备标签和颜色列表
categories = np.unique(midwest['category'])
colors=[plt.cm.tab10(i/float(len(categories)-1))for i in range (len(categories))]
##########建立画布
plt.figure( figsize=(16,10), #绘图尺寸
dpi=80, #图像的分辩率
facecolor ='w', #图像的背景颜色,设置为白色,默认为白色
edgecolor ='k' #图像的背景颜色,设置为黑色,默认为黑色
)
##############循坏绘图
for i ,category in enumerate(categories):
plt.scatter('area','poptotal',
data=midwest.loc[midwest.category==category,:],
s=20,c=np.array(colors[i]).reshape(1,-1),label=str(category))
#注意到这里的数据或去方式和我们之前绘图的不一样了吗?
#我们不仅可以输入横纵坐标,也可以输入横纵坐标的名字,然后使用data这个参数来传入全数据集
#我们不仅可以循坏i,还可以对i和category一同循坏
#############对图像进行装饰############
#plt.gca() 获取当前的子图,如果当前没有子图的话,就帮我创建一个新的子图
plt.gca().set(xlim=(0.0,0.12),ylim=(0,80000))#控制横纵坐标的范围
plt.xticks(fontsize=12) #坐标轴上的尺寸的字的大小
plt.yticks(fontsize=12)
plt.ylabel('Population',fontsize=12)#坐标轴上的标题和字体的大小
plt.xlabel('Area',fontsize=22)
plt.title('scatterplot of Midwest Area vs Population',fontsize =22)#整个图像的标题和字体的大小
plt.legend(fontsize =12) #图例的字体的大小
plt.show()
###########################################################两者循化的比较
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]
)
for i ,category in enumerate(categories):
plt.scatter('area','poptotal',
data=midwest.loc[midwest.category==category,:],
s=20,c=np.array(colors[i]).reshape(1,-1),label=str(category))
#######################################################
今天的文章python可视化学习二(复杂的散点图)分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/61748.html