绘制直方图的线图

2024-03-29 12:15:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我尽量用牛郎星来复制这个图表。 https://fivethirtyeight.com/wp-content/uploads/2014/04/hickey-bechdel-11.png?w=575

我被困在通过/不通过的黑线上。这类似于牛郎星的例子:https://altair-viz.github.io/gallery/step_chart.html。 但是:在538 viz中,最后日期的值必须扩展到最后一个元素的整个宽度。在步骤图示例和我的解决方案中,只要满足最后一个日期元素,行就会停止。你知道吗

我查看了altair的github和google组,没有发现类似的问题。你知道吗

import altair as alt
import pandas as pd

movies=pd.read_csv('https://raw.githubusercontent.com/fivethirtyeight/data/master/bechdel/movies.csv')
domain = ['ok', 'dubious','men', 'notalk', 'nowomen']

base=alt.Chart(movies).encode(
  alt.X("year:N",bin=alt.BinParams(step=5,extent=[1970,2015]),axis=alt.Axis(labelAngle=0, labelLimit=50,labelFontSize=8),title=None),  alt.Y("count()",stack='normalize',title=None,axis=alt.Axis(format='%',values=[0, 0.25,0.50,0.75,1]))

).properties(width=400)
main=base.transform_calculate(cleanrank='datum.clean_test == "ok" ? 1 : datum.clean_test == "dubious" ? 2 : datum.clean_test == "men" ? 3 : datum.clean_test == "notalk" ? 4 : 5'
                ).mark_bar(stroke='white' #add horizontal lines
                ).encode(  
  alt.Color("clean_test:N",scale=alt.Scale(
      domain=domain,
      range=['dodgerblue', 'skyblue', 'pink', 'coral','red']))
    ,order=alt.Order('cleanrank:O', sort='ascending')
)

extra=base.transform_calculate(cleanpass='datum.clean_test == "ok" ? "PASS" : datum.clean_test == "dubious" ? "PASS" : "FAIL"'
                      ).mark_line(interpolate='step-after'
                      ).encode(alt.Color("cleanpass:N",scale=alt.Scale(domain=['PASS','FAIL'],range=['black','white']))
                      )



alt.layer(main,extra).configure_scale(
    bandPaddingInner=0.01 #smaller vertical lines
).resolve_scale(color='independent')

Tags: httpstestcleanbasedomainstepokpass