在一个普通条形图旁边创建一个堆叠条形图?
Creating ONE stacked bar beside ONE normal bar in plotly?
我有一个名为 'CountryCounts'
的系列,它是在我原始数据框的 'Country' 列 OGdf['Country']
.
上调用 .value_counts()
的结果
United States 1234
United Kingdom 332
Canada 111
France 61
Australia 55
...
Israel 1
Bahamas 1
Romania 1
Greece 1
United Arab Emirates 1
Name: Country, Length: 63, dtype: int64
我想要做的是创建一个 plotly 条形图,其中第一行(在本例中为美国 - 1234)被绘制为它自己的条形图。
然后,每隔一行合并后在其旁边绘制为堆叠条(总长度将是其他行的总和),但每一行都有悬停信息(这样您仍然可以看到英国是它自己的该条内的颜色、加拿大等)
我创建了一个简短的函数来分离剩余的条目,直到它们与第一个相同:
def find_next_series_equivalent(series):
primary = series[0]
if series[1:-1].sum() > primary:
i = 2
while series[1:i].sum() < primary:
i += 1
return series[1:i]
else:
return series[1:-1]
我已经通过直方图尝试过:
fig = px.histogram(OGdf, x='Country', barmode='stack')
和条形图:
first_entry = OGdf['Country'].value_counts()[0]
fig = px.bar(y = [first_entry.index], x= [first_entry.values], orientation='h')
fig.update_xaxes(title='# From Country')
fig.update_yaxes(title='Country')
othersdict = find_next_series_equivalent(OGdf['Country'].value_counts()).to_dict()
othersBar = go.Bar(
y = othersdict.index,
x = othersdict.values)
fig.add_trace(othersBar, row=1, col=1)
fig.update_layout(barmode='stack')
两者都没有实现我的目标。非常感谢您的帮助。提前致谢:)
(顺便说一句,我正在使用 plotly express,我的 pandas 绘图后端设置为 plotly)
- 如果您按照描述的方式创建图形,那就很简单了。 xaxis 是两个值之一
- rest 然后将参数设置为 plotly express bar
- 有隐藏图例,您可以根据需要显示,但对于 60 多个国家/地区可能会太长
- 使用了来自
value_counts()
的样本数据
import plotly.express as px
import io
import pandas as pd
import numpy as np
df = pd.read_csv(io.StringIO("""United States 1234
United Kingdom 332
Canada 111
France 61
Australia 55
Israel 1
Bahamas 1
Romania 1
Greece 1
United Arab Emirates 1"""), sep="\s\s+", engine="python", header=None).rename(columns={0:"Country",1:"Count"})
fig = px.bar(df, x=np.where(df["Country"].eq("United States"), "United States", "Other"), y="Count",
hover_data=["Country"], color="Country")
# if legend is not wanted...
fig = fig.update_layout(showlegend=False)
fig
我有一个名为 'CountryCounts'
的系列,它是在我原始数据框的 'Country' 列 OGdf['Country']
.
.value_counts()
的结果
United States 1234
United Kingdom 332
Canada 111
France 61
Australia 55
...
Israel 1
Bahamas 1
Romania 1
Greece 1
United Arab Emirates 1
Name: Country, Length: 63, dtype: int64
我想要做的是创建一个 plotly 条形图,其中第一行(在本例中为美国 - 1234)被绘制为它自己的条形图。
然后,每隔一行合并后在其旁边绘制为堆叠条(总长度将是其他行的总和),但每一行都有悬停信息(这样您仍然可以看到英国是它自己的该条内的颜色、加拿大等)
我创建了一个简短的函数来分离剩余的条目,直到它们与第一个相同:
def find_next_series_equivalent(series):
primary = series[0]
if series[1:-1].sum() > primary:
i = 2
while series[1:i].sum() < primary:
i += 1
return series[1:i]
else:
return series[1:-1]
我已经通过直方图尝试过:
fig = px.histogram(OGdf, x='Country', barmode='stack')
和条形图:
first_entry = OGdf['Country'].value_counts()[0]
fig = px.bar(y = [first_entry.index], x= [first_entry.values], orientation='h')
fig.update_xaxes(title='# From Country')
fig.update_yaxes(title='Country')
othersdict = find_next_series_equivalent(OGdf['Country'].value_counts()).to_dict()
othersBar = go.Bar(
y = othersdict.index,
x = othersdict.values)
fig.add_trace(othersBar, row=1, col=1)
fig.update_layout(barmode='stack')
两者都没有实现我的目标。非常感谢您的帮助。提前致谢:)
(顺便说一句,我正在使用 plotly express,我的 pandas 绘图后端设置为 plotly)
- 如果您按照描述的方式创建图形,那就很简单了。 xaxis 是两个值之一
- rest 然后将参数设置为 plotly express bar
- 有隐藏图例,您可以根据需要显示,但对于 60 多个国家/地区可能会太长
- 使用了来自
value_counts()
的样本数据
import plotly.express as px
import io
import pandas as pd
import numpy as np
df = pd.read_csv(io.StringIO("""United States 1234
United Kingdom 332
Canada 111
France 61
Australia 55
Israel 1
Bahamas 1
Romania 1
Greece 1
United Arab Emirates 1"""), sep="\s\s+", engine="python", header=None).rename(columns={0:"Country",1:"Count"})
fig = px.bar(df, x=np.where(df["Country"].eq("United States"), "United States", "Other"), y="Count",
hover_data=["Country"], color="Country")
# if legend is not wanted...
fig = fig.update_layout(showlegend=False)
fig