3

我有一个我正在尝试绘制的数据框。我希望数据点在我的图中沿 x 轴以排序顺序出现。我曾尝试在将数据框传递给 ggplot 之前对其进行排序,但是我的订单被忽略了。我的数据如下,我想对'value'属性进行排序。

       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

4

2 回答 2

5

你可以通过两种方式做到这一点

  1. 确保映射到 x 轴的变量是分类变量,并且类别排序正确。pd.unique下面我使用按出现顺序返回值的事实。
corr.sort_values(by='value').reset_index(drop = True)
corr['var2'] = pd.Categorical(corr.var2, categories=pd.unique(corr.var2))
...
  1. Plotnine 有一个内部函数reorder(在 v0.7.0 中引入),您可以在aes()调用中使用它来根据另一个变量的值更改一个变量的值的顺序。请参阅页面底部的重新排序文档。
# no need to sort values
p = ggplot(data = corr, mapping = aes(x='reorder(var2, value)', y='value')) +\
...
于 2020-06-22T20:22:10.247 回答
0

我无法reorder()上班,但我可以scale_x_discrete()用来控制订单。见https://stackoverflow.com/a/63578556/7685

于 2020-08-25T12:34:06.257 回答