如何根据 python plotnine 中的另一个变量值对类别重新排序或排序?
How to reorder or sort categories based on another variable values in python plotnine?
我正在尝试在 python
中使用 plotnine
,但无法在 python
中使用 r
的 fct_reorder
。基本上我想根据另一个变量的增加值绘制分类变量的类别以在 x 轴上排列,但我无法这样做。
import numpy as np
import pandas as pd
from plotnine import *
test_df = pd.DataFrame({'catg': ['a','b','c','d','e'],
'val': [3,1,7,2,5]})
test_df['catg'] = test_df['catg'].astype('category')
当我根据 .sort_values()
对它进行排序和绘制时,它不会重新排列 x axis
上的类别:
test_df = test_df.sort_values(by = ['val']).reset_index(drop=True)
(ggplot(data = test_df,
mapping = aes(x = test_df.iloc[:, 0], y = test_df['val']))
+ geom_line(linetype = 2)
+ geom_point()
+ labs(title = str('Weight of Evidence by ' + test_df.columns[0]),
x = test_df.columns[0],
y = 'Weight of Evidence')
+ theme(axis_text_x= element_text(angle = 0))
)
期望的输出:
我在他们使用 reorder
的地方看到了这个 ,但我在 plotnine 中找不到任何重新排序的工作。
Plotnine 确实有 reorder。它是创建和美学映射时可用的内部函数,就像factor
。
在您的示例中,您可以这样使用它:
ggplot(data=test_df, mapping=aes(x='reorder(catg, val)', y='val'))
我正在尝试在 python
中使用 plotnine
,但无法在 python
中使用 r
的 fct_reorder
。基本上我想根据另一个变量的增加值绘制分类变量的类别以在 x 轴上排列,但我无法这样做。
import numpy as np
import pandas as pd
from plotnine import *
test_df = pd.DataFrame({'catg': ['a','b','c','d','e'],
'val': [3,1,7,2,5]})
test_df['catg'] = test_df['catg'].astype('category')
当我根据 .sort_values()
对它进行排序和绘制时,它不会重新排列 x axis
上的类别:
test_df = test_df.sort_values(by = ['val']).reset_index(drop=True)
(ggplot(data = test_df,
mapping = aes(x = test_df.iloc[:, 0], y = test_df['val']))
+ geom_line(linetype = 2)
+ geom_point()
+ labs(title = str('Weight of Evidence by ' + test_df.columns[0]),
x = test_df.columns[0],
y = 'Weight of Evidence')
+ theme(axis_text_x= element_text(angle = 0))
)
期望的输出:
我在他们使用 reorder
的地方看到了这个
Plotnine 确实有 reorder。它是创建和美学映射时可用的内部函数,就像factor
。
在您的示例中,您可以这样使用它:
ggplot(data=test_df, mapping=aes(x='reorder(catg, val)', y='val'))