#python #matplotlib #seaborn
Вопрос:
Я хочу построить несколько диаграмм в виде сетки фасетов, каждая из которых включает в себя две точки. Кроме того, я хочу рассчитать и отобразить наклон линии:
ID TimePoint1 TimePoint2
================================
A 500 20000
B 200 1000
C 3000 50000
Я попробовал этот пример кода, но на графиках ничего не отображается:
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt
data = pd.read_table("test.csv", sep=",")
g = sns.FacetGrid(data, col="ID", col_wrap=4, height=2, ylim=(0, 10))
g.map(sns.pointplot, "TimePoint1", "TimePoint2", color=".3", ci=None)
Как я могу добиться этого с помощью seaborn?
Ответ №1:
Здесь вы использовали точку времени 1 как x, а точку времени 2 как y. Чтобы достичь того, чего вы хотите, вам сначала нужно изменить форму ваших данных. Предполагая data
входные данные:
import pandas as pd
import matplotlib.pyplot as plt
data_long = (data.rename(columns=lambda x: int(x[-1]) if x.startswith('TimePoint') else x)
.melt(id_vars=['ID'], var_name='TimePoint')
)
g = sns.FacetGrid(data_long, col="ID", col_wrap=4, height=2,) # ylim=(0, 10))
g.map(sns.pointplot, "TimePoint", "value", color=".3", ci=None)
выход:
nb. Я удалил ваш ylim, который был недействителен
data_long:
ID TimePoint value
0 A 1 500
1 B 1 200
2 C 1 3000
3 A 2 20000
4 B 2 1000
5 C 2 50000
Вы также можете удобно использовать catplot
эту обертку вокруг FacetGrid:
sns.catplot(data=df_long, x='TimePoint', y='value', col='ID',
col_wrap=4, height=2, color=".3", ci=None, kind='point'
)
Комментарии:
1. примечание: OP может упростить
FacetGrid
map
использованиеcatplot
обертки:sns.catplot(x="TimePoint", y="value", col="ID", col_wrap=4, height=2, color=".3", ci=None, kind="point", data=data_long)
2. @tdy Да, верно, я только что использовал исходный код, но это очень хороший момент. Я обновил ответ.
3. @mozway Я вижу, не понял, что мне нужно переформатировать данные. Спасибо!