如何解决我将如何像 Altair 这样并排创建条形图?
Image of What I want to create
我得到了图表的左侧(前三分之一),并尝试创建一个 'bars2' 和 'text2' 字段,但没有成功,并将其添加到原始的 ranked_movies 字段中,但这很混乱。有没有办法移动和压缩并添加一整套其他条形图?
tuples = list(zip([names[ep] for ep in episodes],topthird,middlethird))
binranking_per_df = pd.DataFrame(tuples,columns = ['Name','Top Third','Middle Third'])
#ranking_per_df
bars = alt.Chart(binranking_per_df).mark_bar(size=20).encode(
x=alt.X(
'Top Third',axis=None),y=alt.Y(
'Name:N',axis=alt.Axis(tickCount=5,title=''),sort=names_l
)
)
bars2 = alt.Chart(binranking_per_df).mark_bar(size=20).encode(
x=alt.X(
'Middle Third',sort=names_l
)
)
text = bars.mark_text(
align='left',baseline='middle',dx=3
).encode(
text=alt.Text('Top Third:Q',format='.0%')
)
text2 = bars.mark_text(
align='left',dx=3
).encode(
text=alt.Text('Middle Third:Q',format='.0%')
)
ranked_movies = (text + bars).configure_mark(
color='#008fd5'
).configure_view(
strokeWidth=0
).configure_scale(
bandPaddingInner=0.2
).properties(
width=500,height=180
).properties(
title="Whats the Best 'Star Wars' Movie?"
)
解决方法
此问题(关于相同图表)先前已回答 here,但不幸的是该问题已被用户删除。
这是我的回答:
Altair 画廊提供了几个分面条形图示例(例如 this one)对于您想到的图表,您可以通过 faceting 一个 Layer Chart 继续,其中包含一个条形图和一个文本层。例如:
import altair as alt
import numpy as np
import pandas as pd
titles = ['The Phantom Menace','Attack of the Clones','Revenge of the Sith','A New Hope','The Empire Strikes Back','Return of the Jedi']
categories = ['Top third','Middle third','Bottom third']
percentages = [
[0.16,0.14,0.13,0.50,0.64,0.43],[0.37,0.29,0.40,0.31,0.22,0.41],[0.46,0.57,0.47,0.19,0.17]
]
titles,categories,percentages = map(
np.ravel,np.broadcast_arrays(
titles,np.array(categories)[:,None],percentages))
df = pd.DataFrame({
'titles': titles,'categories': categories,'percentages': percentages,})
base = alt.Chart(df).encode(
x=alt.X('percentages:Q',axis=None),y=alt.Y('titles:N',title=None,sort=titles),).properties(
width=70
)
bars = base.mark_bar().encode(
color=alt.Color('categories:N',legend=None)
)
text = base.mark_text(dx=15).encode(
text=alt.Text('percentages:Q',format=".0%")
)
(bars + text).facet(
column=alt.Column('categories:N',sort=categories)
).configure_view(
stroke='transparent'
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。