我在用transform_regression
在图表中创建回归线和相应的方程文本。对于单个回归,这工作得很好,但是对于 setgroupby=['something']
选项,文本将绘制在彼此之上。
我尝试使用构建字符串lineBreak='\n'
但这没有帮助。
它还为名为的方程创建了自己的颜色组undefined
,这不太实用。有什么办法可以避免这种情况吗?我知道this https://stackoverflow.com/questions/64665596/how-to-label-the-line-from-transform-regression-using-altair问题,但我不想更改名称,我宁愿根本不给它一个自己的条目。
这是一个例子:
import altair as alt
import altair_transform
import pandas as pd
import numpy as np
np.random.seed(42)
x = np.linspace(0, 10)
y = np.e ** (-0.1 *x) + np.random.randn(len(x)) / 5
group = np.random.choice(['a','b'],len(x))
df = pd.DataFrame({'x': x, 'y': y, 'group': group})
df.loc[df.group == 'a', 'y'] *= 0.1
chart = alt.Chart(df).mark_point().encode(
x='x',
y= alt.Y('y',scale = alt.Scale(type= 'log')),
color= 'group')
Reg_Line = chart.transform_regression('x', 'y',
method="exp",
groupby=["group"]
).mark_line()
Reg_Params = chart.transform_regression('x', 'y',
method="exp",
groupby=["group"],
params=True
).mark_text(align='left', lineBreak='\n'
).encode(
x=alt.value(150), # pixels from left
y=alt.value(250), # pixels from top
text='params:N'
).transform_calculate(
params='"r² = " + round(datum.rSquared * 100)/100 + \
" y = " + round(datum.coef[0] * 10)/10 + " + e ^ (" + \
round(datum.coef[1] * 10000)/10000 + "x" + ")" + \n + " "')
chart + Reg_Line + Reg_Params