Create a scatterplot from the data of two dataframes?

Question:

I have two dataframes in python. The content of them is the following:

Table=conn

A   B   relevance
1   3   0.7
2   7   0.1
5   20  2
6   2   7

table=point

Point  Lat   Lon
1      45.3  -65.2
2      34.4  -60.2
3      40.2  -60.1
20     40.4  -63.1

In the first table, column A represents an origin, column B a destination and the relevance of the link.

On the other hand, in the second table we have for each point (origin or destination) its coordinates.

The problem is that I want to create a visualization in Python that allows to query the coordinates of each origin or destination (column A and B of the first table) in the second table and make a scatterplot with it. Then, link each of the origins and destinations of the first column taking into account the relevance with thicker lines as it has more relevance.

link refers to the line that joins the points in the graphic representation.

Any idea? I’ve started with a very basic code approach but I’m really having trouble following along.

for row in conn.interrows():
    row[1][0]
    row[1][1]
    row[1][3]   

Answers:

Do you have two DataFrames: point and conn, right?

# 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')
Answered By: Joao_PS
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.