使用Python中的plotnine geom_smooth手动更改趋势线的线型

2024-04-19 02:10:01 发布

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

我正在用Python为两个组绘制一个折线图,我还想添加两条趋势线。数据位于数据框df

data = [[1, 4.5,'group1'], [2, 4.25,'group1'], [3, 3.75,'group1'],[4, 3.5,'group1'],[1, 4.0,'group2'],[2, 3.75,'group2'],[3, 4.0,'group2'],[4, 4.25,'group2']] 

#Create the pandas DataFrame 
df = pd.DataFrame(data, columns = ['xvar', 'yvar','category'])

我使用以下代码创建一个折线图。我希望趋势线是虚线,而不是默认的实线,因此我在geom_smooth()中包含了linetype='domind'。但是,我希望趋势线具有两组的各自线颜色,我希望通过scale\u color\u手册规范实现这一点

ggplot(figure1data, aes(x='xvar', y='yvar', color='category')) + geom_line() + geom_point() + labs(x="Xvar",y="Yvar") + ylim(3.5,4.5) + theme_classic() + theme(legend_title=element_blank()) + geom_smooth(mapping=aes(linetype='dotted'),method='lm',se=False) + scale_color_manual(values=('darkblue','darkred'))

但我得到了这个错误:

PlotnineError: "Could not evaluate the 'linetype' mapping: 'dotted' (original error: name 'dotted' is not defined)"

我遵循给出的文档。不知道出了什么问题

几个resources表示两个组的线型可以更改,但这不是我想要实现的。我希望趋势线的线型相同,但与主线不同


Tags: the数据dataframedfdata趋势colordotted
1条回答
网友
1楼 · 发布于 2024-04-19 02:10:01

这可以通过将线型设置为aes()之外的参数来实现,如下所示:

import pandas as pd
from plotnine import *

data = [[1, 4.5,'group1'], [2, 4.25,'group1'], [3, 3.75,'group1'],[4, 3.5,'group1'],[1, 4.0,'group2'],[2, 3.75,'group2'],[3, 4.0,'group2'],[4, 4.25,'group2']] 

#Create the pandas DataFrame 
df = pd.DataFrame(data, columns = ['xvar', 'yvar','category'])

(ggplot(df, aes(x='xvar', y='yvar', color='category')) + 
  geom_line() + 
  geom_point() + 
  labs(x="Xvar",y="Yvar") + 
  ylim(3.5,4.5) + 
  theme_classic() + 
  theme(legend_title=element_blank()) + 
  geom_smooth(linetype='dotted', method='lm',se=False) + 
  scale_color_manual(values=('darkblue','darkred')))

enter image description here

相关问题 更多 >