假设我有这样的样本数据:
#Sample Data
df=pd.DataFrame ({'x':[1,1,2,2],'y':[2,3,2,3],'Share':[0.834437,0.165562,0.966749,0.033250]})
'x' 代表客户数量,'y' 代表商店 id,'Share' 显示客户从一家商店购买的商品与所有商店相比的百分比。这意味着每个客户的份额总和必须接近 1.
另一方面,每个商店有两种产品:A 和 B,顾客可以购买,并且每种产品也有顾客购买的百分比。
df2=pd.DataFrame({'x':[1,1,1,1,2,2,2,2],'y':[2,2,3,3,2,2,3,3],'product'=[A,B,A,B,A,B,A,B],'ProdShare':[0.863095,0.136904,0.940000,0.060000,0.842494,0.157505,0.925233,0.074766]}
例如顾客1号,在2号店购买,是他购买次数的0.834437次。他购买产品 A 0.863095 次,购买 B 0.136904 次 (0.863095+0.136904~1)
现在我想在剧情中表现出来
如您所见,这是
scatter_pie
图表,每个圆圈表示商店的份额百分比,每个圆圈内,红色表示A的份额百分比,黄色表示B的份额百分比。
我怎样才能在 python 中得到这个图表?
我认为使用子图会更容易。
这是我得到的:
labels = ["A", "B"]
fig = make_subplots(
rows=2, cols=2,
specs=[[{'type':'domain'}, {'type':'domain'}], [{'type':'domain'}, {'type':'domain'}]],
subplot_titles=['Subtitle 1', 'Subtitle 2', 'Subtitle 3', 'Subtitle 4']
)
A_percents = [0.863095, 0.94, 0.842494, 0.925233]
B_percents = [0.136904, 0.06, 0.157505, 0.074766]
sizes = [0.834437,0.165562,0.966749,0.033250]
rows = [1, 1, 2, 2]
columns = [1, 2, 1, 2]
for i in range(4):
fig.add_trace(
go.Pie(
labels=labels,
values=[A_percents[i]*sizes[i], B_percents[i]*sizes[i]],
scalegroup='one',
name="Name"
),
row=rows[i], col=columns[i]
)
fig.update_layout(title_text='Title', height=950, width=950)
fig.show()
工作原理:同一尺度组中的地块用与其总大小成比例的面积表示。