Altair分面饼图(Pie Chart)标签无法正常渲染问题求助
分面饼图标签堆叠问题解决办法
你遇到的标签挤在一起的问题,是因为文本标记的角度定位没跟上分面的分组逻辑——原代码里文本直接用原始的v值当角度,没按每个分面里的扇区计算中心位置。
修正后的完整代码
import pandas as pd import altair as alt df = pd.read_csv("input.csv", keep_default_na=False) base = alt.Chart(df).encode( theta=alt.Theta(field="v", type="quantitative"), color=alt.Color(field="k", type="nominal") ) pie = base.mark_arc(outerRadius=100) # 核心改动:给文本的theta编码加aggregate='mean',自动计算每个扇区的中心角度 text = base.mark_text(radius=115, fill="black").encode( theta=alt.Theta(field="v", type="quantitative", aggregate='mean'), text=alt.Text(field="v", type="quantitative", format=",.1f") ) alt.layer(pie, text).facet(column='label')
为什么这么改
- 原代码里文本的
theta直接用原始数值,相当于把所有分面的数值混在一起算角度,自然会堆在同一个位置。 - 加上
aggregate='mean'后,Altair会针对每个分面、每个类别(k)单独计算扇形的中心角度,标签就能精准对应到每个扇区外侧了。 - 另外
alt.layer不需要重复传data=df,base已经绑定了数据,传了反而多余。
测试用数据
f,n,k,v,label 1,3,0-5 %,99.7289972899729,Forest 1,4,5-10 %,0.27100271002710025,Forest 0,1,0-5 %,100.0,Non-Forest 254,5,0-5 %,99.0077177508269,unclassifiable 254,6,5-10 %,0.9922822491730982,unclassifiable
内容的提问来源于stack exchange,提问作者aborruso
相关产品推荐
相关产品推荐

