Как построить график рассеяния с x и y в виде заданных размеров и разных цветовых точек для каждого уникального измерения z (числовое / не числовое)? - PullRequest
0 голосов
/ 14 мая 2019

Я пытаюсь проанализировать большие данные, и мои данные имеют 3 столбца. Первые два столбца - это координаты x, y (широта и долгота), а третий - значение (не числовое), которое мне интересно. Я хочу создатьлибо трехмерный график рассеяния, либо простой двухмерный график рассеяния, где каждая точка окрашена этим значением 3-го столбца, но matplotlib испытывает трудности.

Если я попробую точечный график, это просто займет вечность.

Есть лиЛюбой другой способ достижения этого?

Я попробовал точечный график, ниже приведен код

import matplotlib.pyplot as plt
import matplotlib.cm as cm
import matplotlib.colors as colors
import numpy as np
import pandas as pd

sql_4 = '''
Select CAST(SUBSTRING(SUBSTRING(end_loc_gis, 8, LEN(end_loc_gis) - 8),0,CHARINDEX(' ', SUBSTRING(end_loc_gis, 8, LEN(end_loc_gis) - 8))) AS FLOAT) AS Latitude , CAST(SUBSTRING(SUBSTRING(end_loc_gis, 8, LEN(end_loc_gis) - 8),CHARINDEX(' ', SUBSTRING(end_loc_gis, 8, LEN(end_loc_gis) - 8))+1 ,LEN(SUBSTRING(end_loc_gis, 8, LEN(end_loc_gis) - 8)) ) AS FLOAT) AS Longitude , organization
from 
DriveTable d
inner join
UserInfoTable u
on d.u_id = u.p_id
'''

sql_5 = '''
Select Distinct organization
from 
DriveTable d
inner join
UserInfoTable u
on d.u_id = u.p_id
'''
df = pd.read_sql_query(sql_4, db)
df

dfO = pd.read_sql_query(sql_5, db)
dfO

fig, ax = plt.subplots()
Lat = df['Latitude']
Lon = df['Longitude']
dfA = pd.DataFrame({'n1':Lat, 'n2':Lon, 'l':dfO['organization']})

colormap = cm.viridis
colorlist = [colors.rgb2hex(colormap(i)) for i in np.linspace(0, 0.9, len(dfA['l']))]

for i,c in enumerate(colorlist):

    x = dfA['n1'][i]
    y = dfA['n2'][i]
    l = dfA['l'][i]

    ax.scatter(x, y, label=l, s=50, linewidth=0.1, c=c)

ax.legend()

plt.show()

Он работает для небольших наборов данных, но мой фрейм данных имеет миллионы записей.

Ожидается, что выходные данные будут представлены таким образом, что для каждой уникальной организации будет свой уникальный цвет, и он будет отображаться с широтой и долготой.

...