Я пытаюсь проанализировать большие данные, и мои данные имеют 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()
Он работает для небольших наборов данных, но мой фрейм данных имеет миллионы записей.
Ожидается, что выходные данные будут представлены таким образом, что для каждой уникальной организации будет свой уникальный цвет, и он будет отображаться с широтой и долготой.