一次散点图数据可视化尝试

浏览: 2887

前言

今天,群里突然有个小伙伴找人帮忙出个图

然后我就帮他看看是什么图

结果

是个散点图

原来

他是在做大学生数学建模竞赛

他理想的图是这样的:

Clipboard Image.png


我极力模仿

最后做出来的图是这样的:

scatter1.png

(他说那个虚线不需要)


开始瞎做

这是一个真实的需求案例(虽然是个比赛,但是数据是比较规范的)


数据如下所示:

Clipboard Image.png


一共有835条记录


目标就是根据经纬度在二维散点图上定位画散点

散点根据任务执行情况0还是1用两种颜色区分

任务标价大小不同散点大小不同


按照他的要求,只需要画任务标价是65/70/75/80/85的散点


因为我第一次做这种从excel中导入数据绘图

所以我自己摸索

做的代码比较傻,hhhh

代码如下:

import pandas as pd
data = pd.read_excel('data_9_16.xls')

注:打开数据文件


看一下文件头部数据信息:

data.head()

Clipboard Image.png


取出一类数据:

data_65_1 = data[(data['任务标价'] == 65) & (data['任务执行情况']== 1)]
data_65_1.head()

Clipboard Image.png


为绘图准备x y轴数据:

x_65_1 = data_65_1['任务gps经度']
y_65_1 = data_65_1['任务gps 纬度']


接下来准备其他组数据(这个过程很傻。。。有没有更好的办法,例如做个group by?):

data_65_0 = data[(data['任务标价'] == 65) & (data['任务执行情况']== 0)]
x_65_0 = data_65_0['任务gps经度']
y_65_0 = data_65_0['任务gps 纬度']
data_70_0 = data[(data['任务标价'] == 70) & (data['任务执行情况']== 0)]
x_70_0 = data_70_0['任务gps经度']
y_70_0 = data_70_0['任务gps 纬度']
data_70_1 = data[(data['任务标价'] == 70) & (data['任务执行情况']== 1)]
x_70_1 = data_70_1['任务gps经度']
y_70_1 = data_70_1['任务gps 纬度']
data_75_0 = data[(data['任务标价'] == 75) & (data['任务执行情况']== 0)]
x_75_0 = data_75_0['任务gps经度']
y_75_0 = data_75_0['任务gps 纬度']
data_75_1 = data[(data['任务标价'] == 75) & (data['任务执行情况']== 1)]
x_75_1 = data_75_1['任务gps经度']
y_75_1 = data_75_1['任务gps 纬度']
data_80_0 = data[(data['任务标价'] == 80) & (data['任务执行情况']== 0)]
x_80_0 = data_80_0['任务gps经度']
y_80_0 = data_80_0['任务gps 纬度']
data_80_1 = data[(data['任务标价'] == 80) & (data['任务执行情况']== 1)]
x_80_1 = data_80_1['任务gps经度']
y_80_1 = data_80_1['任务gps 纬度']
data_85_0 = data[(data['任务标价'] == 85) & (data['任务执行情况']== 0)]
x_85_0 = data_85_0['任务gps经度']
y_85_0 = data_85_0['任务gps 纬度']
data_85_1 = data[(data['任务标价'] == 85) & (data['任务执行情况']== 1)]
x_85_1 = data_85_1['任务gps经度']
y_85_1 = data_85_1['任务gps 纬度']


心累啊

之后终于可以绘图了:

%matplotlib inline
import matplotlib.pyplot as plt


plt.scatter(x_65_1, y_65_1, marker = 'o', color = 'g', label='65_1', s = 10, alpha=0.3)
plt.scatter(x_65_0, y_65_0, marker = 'o', color = 'r', label='65_0', s = 10, alpha=0.3)
plt.scatter(x_70_1, y_70_1, marker = 'o', color = 'g', label='70_1', s = 20, alpha=0.3)
plt.scatter(x_70_0, y_70_0, marker = 'o', color = 'r', label='70_0', s = 20, alpha=0.3)
plt.scatter(x_75_1, y_75_1, marker = 'o', color = 'g', label='75_1', s = 30, alpha=0.3)
plt.scatter(x_75_0, y_75_0, marker = 'o', color = 'r', label='75_0', s = 30, alpha=0.3)
plt.scatter(x_80_1, y_80_1, marker = 'o', color = 'g', label='80_1', s = 40, alpha=0.3)
plt.scatter(x_80_0, y_80_0, marker = 'o', color = 'r', label='80_0', s = 40, alpha=0.3)
plt.scatter(x_85_1, y_85_1, marker = 'o', color = 'g', label='85_1', s = 50, alpha=0.3)
plt.scatter(x_85_0, y_85_0, marker = 'o', color = 'r', label='85_0', s = 50, alpha=0.3)

plt.legend(loc = 'lower right')
plt.text(114.25,23.65,'Price tag')
plt.xlabel('Task GPS longitude')
plt.ylabel('Task GPS latitude')

plt.show()

注:alpha代表透明度,如果不透明,会出现点相互覆盖,透明度可以让其显示点的聚集情况,颜色深地方点的密度大。

marker是散点的类型(我想找圆圈形状,但是只能找到圆形,如果有大佬知道,欢迎留言评论,笔芯!)

color代表颜色,r=red红色,g=green绿色

s代表点的大小

我个人想找legend图例的标题怎么设置,奈何没找到,只能将图例移到右下角,上方空出位置用text方法加了一个title

(如果有大佬知道legend的title怎么加,欢迎留言评论,笔芯!)

最终效果如下:

Clipboard Image.png


在绘图过程中,遇到问题要多help

在jupyter notebook中可以使用:

?plt.scatter

看scatter散点图绘图方法和参数

Clipboard Image.png


用:

import matplotlib  
?matplotlib.markers

看可绘制的散点样式

Clipboard Image.png


文章中如有不妥之处请指正~感谢

推荐 0
本文由 ID王大伟 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册