一次散點圖數據可視化嘗試
前言
今天,群里突然有個小夥伴找人幫忙出個圖
然後我就幫他看看是什麼圖
結果
是個散點圖
原來
他是在做大學生數學建模競賽
他理想的圖是這樣的:
我極力模仿
最後做出來的圖是這樣的:
(他說那個虛線不需要)
開始瞎做
這是一個真實的需求案例(雖然是個比賽,但是數據是比較規範的)
數據如下所示:
一共有835條記錄
目標就是根據經緯度在二維散點圖上定位畫散點
散點根據任務執行情況0還是1用兩種顏色區分
任務標價大小不同散點大小不同
按照他的要求,只需要畫任務標價是65/70/75/80/85的散點
因為我第一次做這種從excel中導入數據繪圖
所以我自己摸索
做的代碼比較傻,hhhh
代碼如下:
import pandas as pddata = pd.read_excel(data_9_16.xls)
註:打開數據文件
看一下文件頭部數據信息:
data.head()
取出一類數據:
data_65_1 = data[(data[任務標價] == 65) & (data[任務執行情況]== 1)]data_65_1.head()
為繪圖準備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 inlineimport matplotlib.pyplot as pltplt.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怎麼加,歡迎留言評論,筆芯!)
最終效果如下:
在繪圖過程中,遇到問題要多help
在jupyter notebook中可以使用:
?plt.scatter
看scatter散點圖繪圖方法和參數
用:
import matplotlib ?matplotlib.markers
看可繪製的散點樣式
文章中如有不妥之處請指正~感謝
作者:王大偉 Python愛好者社區唯一小編,請勿轉載,謝謝。
出處:一次散點圖數據可視化嘗試配套視頻教程:Python3爬蟲三大案例實戰分享:貓眼電影、今日頭條街拍美圖、淘寶美食 Python3爬蟲三大案例實戰分享 公眾號:Python愛好者社區(微信ID:python_shequ),關注,查看更多連載內容。加小編個人微信:tsdatajob ,跟作者互動,一起探討。
推薦閱讀:
※5分鐘教你學會Django系統錯誤監控
※Python從零開始系列連載(24)——Python特色數據類型(集合)(上)
※Python從零開始系列連載(11)——Python的基本運算和表達式(中二)
※PyQt5番外篇(1):PyQt5與Opencv的小小融合
※Python:圖片轉字元畫