0

I want to show the legend of the colors assigned to each marker. When I set showlegend = True it only shows one color, and that too with a wrong label. I added the output at the last from one of their examples.

Code

    cities = [dict(
    type = 'scattergeo',
    locationmode = 'country names',
    lon = df['lng'].apply(lambda x: float(x)),
    lat = df['lat'].apply(lambda x: float(x)),
    text = df['name_of_city'],
    marker = dict(
        size = df['total_graduates'].apply(lambda x: float(x))/2000,
        color = df['effective_literacy_rate_total'],
        colorscale='Portland',
        line = dict(width=0.5, color='rgb(40,40,40)'),
        sizemode = 'area'
    )
)]
layout = dict(
        title = 'Top 500 Indian Cities by Population',
        showlegend = True,
        autosize=False,
        width=800,
        height=1000,
        geo = dict(
            resolution=100,
            scope='asia',
            lonaxis = dict( range= [ 65.0 ,100.0] ),
            lataxis = dict( range= [ 0.0,40.0 ] ),
            projection=dict( type = 'Mercator'),
            showland = True,
            landcolor = 'rgb(50,50,50)',
            subunitwidth=1,
            countrywidth=1,
            subunitcolor="rgb(255, 255, 255)",
            countrycolor="rgb(255, 255, 255)"
        ),
    )
fig = dict( data=cities, layout=layout )
iplot( fig, validate=False, filename='top-500-indian-cities' )

Output

enter image description here

How do I show the colorscale legends like this one?

enter image description here

1 Answer 1

1

Try changing the colorscale = 'Jet' and hiding the legend with showlegend = False.

Output from the code below

import pandas as pd
import geopy
import plotly

#get some real data
cit = pd.read_html('https://en.wikipedia.org/wiki/List_of_cities_in_India_by_population', header=0)[0]
lat = pd.read_html('https://en.wikipedia.org/wiki/List_of_cities_by_latitude', header=0)[8]
cit = cit.merge(lat[lat.Country == 'India'], left_on='City', right_on='City')


#convert longitude and latitude
lat = list()
lon = list()
for i in cit.index:
    point = geopy.Point.from_string("{} {}".format(cit.get_value(i, 'Latitude'), cit.get_value(i, 'Longitude')))
    lat.append(point[0])
    lon.append(point[1])

cities = dict(
    type = 'scattergeo',
    locationmode = 'country names',
    lat = lat,
    lon = lon,
    text = cit['City'].tolist(),
    showlegend = False,
    marker = dict(
        size = (cit['Population (2011)[3]'] / 2000).tolist(),
        color = cit['Population (2011)[3]'].tolist(),
        colorscale = 'Jet',
        line = dict(width=0.5, color='rgb(40,40,40)'),
        sizemode = 'area',
        showscale = True
    )
)

layout = dict(
        title = 'Some Indian Cities by Population',
        showlegend = True,
        autosize = False,
        width = 800,
        height = 1000,
        geo = dict(
            resolution=100,
            scope='asia',
            lonaxis = dict( range= [ 65.0 ,100.0] ),
            lataxis = dict( range= [ 0.0,40.0 ] ),
            projection=dict( type = 'Mercator'),
            showland = True,
            landcolor = 'rgb(50,50,50)',
            subunitwidth=1,
            countrywidth=1,
            subunitcolor="rgb(255, 255, 255)",
            countrycolor="rgb(255, 255, 255)"
        ),

    )
fig = dict(data=[cities], layout=layout)
plotly.plotly.sign_in('user', 'key')
plot_url = plotly.plotly.plot(fig)


  [1]: https://i.sstatic.net/I9vGD.png
Sign up to request clarification or add additional context in comments.

1 Comment

Thanks , adding showscale=True Solved the problem for me , thanks again for your effort :)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.