У меня есть два фрейма данных в python. Содержание их следующее:
Таблица = подключение
A B relevance
1 3 0.7
2 7 0.1
5 20 2
6 2 7
Таблица=точка
Point Lat Lon
1 45.3 -65.2
2 34.4 -60.2
3 40.2 -60.1
20 40.4 -63.1
В первой таблице столбец A представляет собой источник, столбец B — пункт назначения и релевантность ссылки.
С другой стороны, во второй таблице мы имеем для каждой точки (отправления или назначения) свои координаты.
Проблема в том, что я хочу создать визуализацию на Python, которая позволяет запрашивать координаты каждого источника или пункта назначения (столбцы A и B первой таблицы) во второй таблице и делать с ней диаграмму рассеяния. Затем свяжите каждое из мест отправления и назначения в первом столбце с учетом релевантности более толстыми линиями, так как оно имеет большее значение.
Ссылка относится к линии, которая соединяет точки в графическом представлении.
Есть идеи? Я начал с очень простого подхода к коду, но у меня действительно возникли проблемы с его выполнением.
for row in conn.interrows():
row[1][0]
row[1][1]
row[1][3]
У вас есть два DataFrames: point и conn, верно?
# To set indexes of "point" equal to "Points"
point.set_index(point.Point, inplace=True)
# config width of lines
min_width = 0.5
max_width = 4.0
min_relevance = conn.relevance.min()
max_relevance = conn.relevance.max()
slope = (max_width - min_width)/(max_relevance - min_relevance)
widths = min_width + slope*(conn.relevance - min_relevance)
# plot lines
for i in range(len(conn)):
origin = conn.loc[i, 'A']
destin = conn.loc[i, 'B']
lat = point.loc[[origin, destin], 'Lat']
lon = point.loc[[origin, destin], 'Lon']
plt.plot(lat, lon, c='red', lw=widths[i])
# plot points
plt.plot(point.Lat, point.Lon, ls='', marker='o', c='blue')
Это размер маркера. Дайте определение min_mk_size и max_mk_size. Настройте размер маркеров так же, как я сделал widths (но используя количество людей). Вы должны получить массив или фрейм данных... возможно, называется mk_sizes. Итак, передайте опцию markersize=mk_sizes в plt.plot.
Привет @Joao_PS, твой код работал идеально. С другой стороны, хотелось бы добавить небольшой функционал: представьте, что в таблице точек есть переменная num people, как я могу представить толщиной точки количество людей?