【问题标题】:Plotly, why are my bubbles all the same color?Plotly,为什么我的泡泡都是一样的颜色?
【发布时间】:2020-07-23 15:04:08
【问题描述】:

我的数据中有一个名为 Pizza Shops 的列,其中包含按州划分的数字,从 10k 到超过 100 万不等(数字是由组成的)。出于某种原因,每个气泡虽然看起来大小合适,但都显示为相同的颜色(红色)。

我的代码

import plotly.graph_objects as go
import pandas as pd
import os

xl_path = "path to XLSX file"

df = pd.read_excel(open(xl_path, 'rb'), sheet_name='Data')
df.head()
scale = 5000
limits = [(0,15000),(15000,50000),(50000,100000),(100000,500000),(500000,2000000)]
colors = ["red","orange","yellow","green","blue"]
df['Text'] = df['State'] + '<br>Number of Pizza Shops ' + (df['Pizza Shops']).astype(str)

fig = go.Figure()

for i in range(len(limits)):
    lim = limits[i]
    df_sub = df[lim[0]:lim[1]]
    fig.add_trace(go.Scattergeo(
        locationmode = 'USA-states',
        locations=df['State Code'],
        text = df_sub['Text'],
        marker = dict(
            size = df_sub['Pizza Shops']/scale,
            color = colors[i],
            line_color='rgb(40,40,40)',
            line_width=0.5,
            sizemode = 'area'
        ),
        name = '{0} - {1}'.format(lim[0],lim[1])))

fig.update_layout(
        title_text = '2019 US Number of Pizza Shops<br>(Click legend to toggle traces)',
        showlegend = True,
        geo = dict(
            scope = 'usa',
            landcolor = 'rgb(217, 217, 217)',
        )
    )

fig.show()

样本数据:

| State     | State Code | Pizza Shops |
----------------------------------------
  Texas           TX         13256
  California      CA         500235
  Idaho           ID         4000
  ....           ....        .... and so on

【问题讨论】:

  • 能否分享您的数据样本?或者至少是一个类似于现实世界数据结构的样本数据集?
  • 我确定您使用了 plotly 代码示例作为参考。我认为该样本是用颜色编码的,以按所有城市的人口排名。您不想根据商店数量对代码进行颜色编码吗?
  • @r-beginners 正确,我使用了情节参考。是的,我希望它按商店数量进行颜色编码。
  • @vestland 我编辑了帖子以提供更好的想法。我有一列“Pizza Shops”,每行有一个随机数,另一列“State”有“Texas”、“California”等。还有“State Code”,它有相应的缩写 TX、CA、等

标签: python pandas plotly bubble-chart


【解决方案1】:

问题在于,使用df_sub = df[lim[0]:lim[1]],您将根据行索引而不是商店数量对数据框进行子集化。如果您的数据框的行数少于 15,000 行,则所有数据点都将落入第一个存储桶中,并显示为红色。

如果您想根据商店数量对数据框进行子集化,您应该将 df_sub = df[lim[0]:lim[1]] 替换为 df_sub = df[(df["Pizza Shops"] &gt;= lim[0]) &amp; (df["Pizza Shops"] &lt; lim[1])]

import plotly.graph_objects as go
import pandas as pd

df = pd.DataFrame({"State": ["Texas", "California", "Idaho", "Alabama", "Arizona", "Georgia", "Washington"],
                   "State Code": ["TX", "CA", "ID", "AL", "AZ", "GA", "WA"],
                   "Pizza Shops": [12500, 25000, 75000, 250000, 1000000, 15000, 100000]})

df["Text"] = df["State"] + "<br>Number of Pizza Shops " + (df["Pizza Shops"]).astype(str)

scale = 2000

limits = [(0,15000),(15000,50000),(50000,100000),(100000,500000),(500000,2000000)]

colors = ["red", "orange", "yellow", "green", "blue"]

fig = go.Figure()

for i in range(len(limits)):

    lim = limits[i]

    df_sub = df[(df["Pizza Shops"] >= lim[0]) & (df["Pizza Shops"] < lim[1])]

    fig.add_trace(go.Scattergeo(
        locationmode="USA-states",
        locations=df_sub["State Code"],
        text=df_sub["Text"],
        marker=dict(
            size=df_sub["Pizza Shops"]/scale,
            color=colors[i],
            line_color="rgb(40,40,40)",
            line_width=0.5,
            sizemode="area"),
        name="{0} - {1}".format(lim[0],lim[1])))

fig.update_layout(
    title_text="2019 US Number of Pizza Shops<br>(Click legend to toggle traces)",
    showlegend=True,
    geo=dict(scope="usa", landcolor="rgb(217, 217, 217)")
)

fig.show()

【讨论】:

    猜你喜欢
    • 2019-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-07
    • 2017-05-19
    • 2015-09-12
    • 2010-11-24
    • 1970-01-01
    相关资源
    最近更新 更多