Altair сортирует ось x перед рисованием линий, поэтому, если у вас есть несколько линий в одной группе, это часто приводит к "шуму", как вы его называете. Это не шум, а скорее точное представление всех точек в вашем наборе данных, показанных в порядке сортировки по умолчанию. Вот простой пример:
import numpy as np
import pandas as pd
import altair as alt
df = pd.DataFrame({
'x': [1, 2, 3, 4, 5, 5, 4, 3, 2, 1],
'y': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
'group': [0, 0, 0, 0, 0, 1, 1, 1, 1, 1]
})
alt.Chart(df).mark_line().encode(
x='x:Q',
y='y:Q'
)
![enter image description here](https://i.stack.imgur.com/PLdeB.png)
Лучший способ исправить это - установить кодировку detail
для столбца, который различает различные линии, которые вы хотели бы нарисовать по отдельности:
alt.Chart(df).mark_line().encode(
x='x:Q',
y='y:Q',
detail='group:N'
)
![enter image description here](https://i.stack.imgur.com/hOdvt.png)
Если важна не группировка, а порядок точек, вы можете указать это, указав канал заказа :
alt.Chart(df.reset_index()).mark_line().encode(
x='x:Q',
y='y:Q',
order='index:Q'
)
![enter image description here](https://i.stack.imgur.com/MshKY.png)
Обратите внимание, что две линии соединены на правом конце. Это фактически то, что matplotlib делает по умолчанию: он поддерживает порядок индексов, даже если есть повторные данные. Использование канала заказа для ваших данных дает результат, который вы ищете:
df1 = pd.read_csv('https://raw.githubusercontent.com/leoUninova/Transistor-altair-plots/master/df1.csv')
alt.Chart(df1.reset_index()).mark_line(size=1).encode(
x='VG:Q',
y='logabsID:Q',
color='Name:N',
order='index:Q'
)
![enter image description here](https://i.stack.imgur.com/U098d.png)
Несколько линий в каждой группе нарисованы в порядке, связанном на концах, так же, как они находятся в matplotlib.