Сюжетная линия/ggplot многомерные боковые диаграммы или jitterplot

#python #r #ggplot2 #plotnine

Вопрос:

Я пытаюсь создать конкретный сюжет, используя ggplot/plotnine. Я бы хотел, чтобы это было по возможности сюжетно, чтобы все, что я сделал, могло остаться в той же записной книжке.

По сути, я хочу создать график бокса/дрожания, который позволяет разделить его по категориям или продолжить дрожание по категориям.

Данные, с которыми я работаю, оценивают 4 различные модели и их процентную ошибку на основе определенной метрики. Структура данных приведена ниже.

Данные:

     Model   metric  Percent Error
0   gbr Lower   46.533009
1   gbr Lower   22.654213
2   gbr Lower   17.404358
3   gbr Lower   5.134485
4   gbr Lower   4.550838
... ... ... ...
9963    cqrn    Average 5.745320
9964    cqrn    Average 16.465810
9965    cqrn    Average 14.737193
9966    cqrn    Average 81.743560
9967    cqrn    Average 73.008793
 

Код:

 (ggplot(dat,aes(x="metric",
                y="Percent Error",
                color = "Model"))  
geom_jitter(width = .25,alpha=.4,show_legend=False)  
scale_y_log10()  
labs(title=f"Error Metrics"))
 

Этот код отображает:
введите описание изображения здесь

Я хочу иметь график, который выглядит так (извините за грубый рисунок). Это может быть связано с коробочными сюжетами или дрожанием — хотя бонусные баллы за дрожание, если сможете!

введите описание изображения здесь

Ответ №1:

Этого можно было бы достичь, установив использование position = position_jitterdodge() :

Примечание: Я немного изменил данные примера, которые вы предоставили, чтобы сделать пример более реалистичным.

 dat = [['gbr', 'Lower', 46.533009], ['gbr', 'Lower', 22.654213], ['gbr', 'Lower', 17.404358], ['cqrn', 'Lower', 5.134485],['cqrn', 'Lower', 4.550838],['gbr', 'Average', 5.745320],['gbr', 'Average', 16.465810],['cqrn', 'Average', 14.737193],['cqrn', 'Average', 81.743560],['cqrn', 'Average', 73.008793]]

dat = pd.DataFrame(dat, columns = ['Model', 'metric','Percent Error'])

(ggplot(dat,aes(x="metric",
                y="Percent Error",
                color = "Model"))  
geom_jitter(alpha=.4, position = position_jitterdodge(jitter_width = .25))  
scale_y_log10()  
labs(title="Error Metrics"))
 

введите описание изображения здесь