带有聚合的绘图地理散布:在悬停中显示聚合信息

时间:2018-08-02 21:50:28

标签: python plotly

我一直试图用Plotly创建一个Geoscatter Plot,其中标记大小应指示一个城市(zip_city)中的客户(行项目)数量。我的代码基于Plotly文档中的两个模板:United States Bubble Map和聚合部分Mapping with Aggregates

除了一个缺点,我设法将代码做到了自己想要的:当我将鼠标悬停在气泡上时,我想查看城市名称加上客户数量(汇总结果),所以类似 Aguadilla:2 。您能帮我怎么做吗?

这是我的代码(作为plotly的初学者,我也愿意进行代码改进):

import plotly.offline as pyo
import pandas as pd

df = pd.DataFrame.from_dict({'Customer': [111, 222, 555, 666],
        'zip_city': ['Aguadilla', 'Aguadilla', 'Arecibo', 'Wrangell'],
        'zip_latitude':[18.498987, 18.498987, 18.449732,56.409507],
        'zip_longitude':[-67.13699,-67.13699,-66.69879,-132.33822]})

data = [dict(
        type = 'scattergeo',
        locationmode = 'USA-states',
        lon = df['zip_longitude'],
        lat = df['zip_latitude'],
        text = df['Customer'],
        marker = dict(
            size = df['Customer'],
            line = dict(width=0.5, color='rgb(40,40,40)'),
            sizemode = 'area'
            ),
        transforms = [dict(
                            type = 'aggregate',
                            groups = df['zip_city'],
                            aggregations = [dict(target = df['Customer'], func = 'count', enabled = True)]
                            )]
        )]


layout = dict(title = 'Customers per US City')

fig = dict( data=data, layout=layout )
pyo.plot( fig, validate=False)

更新:

我可以直接在transforms参数中访问data参数的结果以显示每个城市的客户数量吗?

1 个答案:

答案 0 :(得分:1)

您可以创建一个包含所需内容的列表,然后在text=list中设置data。同样不要忘记指定hoverinfo='text'

我已更新您的代码,请尝试以下操作:

import pandas as pd
import plotly.offline as pyo

df = pd.DataFrame.from_dict({'Customer': [111, 222, 555, 666],
        'zip_city': ['Aguadilla', 'Aguadilla', 'Arecibo', 'Wrangell'],
        'zip_latitude':[18.498987, 18.498987, 18.449732,56.409507],
        'zip_longitude':[-67.13699,-67.13699,-66.69879,-132.33822]})

customer = df['Customer'].tolist()
zipcity = df['zip_city'].tolist()
list = []
for i in range(len(customer)):
    k = str(zipcity[i]) + ':' + str(customer[i])
    list.append(k)

data = [dict(
        type = 'scattergeo',
        locationmode = 'USA-states',
        lon = df['zip_longitude'],
        lat = df['zip_latitude'],
        text = list,
        hoverinfo = 'text',
        marker = dict(
            size = df['Customer'],
            line = dict(width=0.5, color='rgb(40,40,40)'),
            sizemode = 'area'
            ),
        transforms = [dict(
                            type = 'aggregate',
                            groups = df['zip_city'],
                            aggregations = [dict(target = df['Customer'], func = 'count', enabled = True)]
                            )]
        )]

layout = dict(title = 'Customers per US City')

fig = dict(data=data, layout=layout)
pyo.plot(fig, validate=False)