我有一个数据帧,我正在尝试绘制。我希望数据点在我的图中沿 x 轴按排序顺序显示。在将数据帧传递给 ggplot 之前,我尝试过对数据帧进行排序,但是我的订单被忽略了。我的数据如下,我想按"值"属性排序。
var1 var2 value direction
0 PM25 PBAR 0.012001 1
1 PM25 DELTA_T 0.091262 1
2 PM25 RH 0.105857 1
3 PM25 WDV 0.119452 0
4 PM25 T10M 0.119506 0
5 PM25 T2M 0.129869 0
6 PM25 SRAD 0.134718 0
7 PM25 WSA 0.169000 0
8 PM25 WSM 0.174202 0
9 PM25 WSV 0.181596 0
10 PM25 SGT 0.263590 1
这是我的代码当前的样子:
tix = np.linspace(0,.3,10)
corr = corr.sort_values(by='value').reset_index(drop = True)
p = ggplot(data = corr, mapping = aes(x='var2', y='value')) +
geom_point(mapping = aes(fill = 'direction')) + ylab('Correlation') + ggtitle('Correlation to PM25') +
theme_classic() + scale_y_continuous(breaks = tix, limits = [0, .3])
print(p)
这将生成以下图:
1
您可以通过两种方式做到这一点
- 确保映射到 x 轴的变量是分类变量,并且类别排序正确。下面我使用
pd.unique
按出现顺序返回值的事实。
corr.sort_values(by='value').reset_index(drop = True)
corr['var2'] = pd.Categorical(corr.var2, categories=pd.unique(corr.var2))
...
- Plotnine 有一个内部函数
reorder
(在 v0.7.0 中引入(,您可以在aes()
调用中使用它来根据另一个变量的值更改一个变量的值顺序。请参阅页面底部的重新排序文档。
# no need to sort values
p = ggplot(data = corr, mapping = aes(x='reorder(var2, value)', y='value')) +
...
我无法reorder()
工作,但我能够使用scale_x_discrete()
来控制订单。 请参阅 https://stackoverflow.com/a/63578556/7685