使用图九按排序顺序绘制



我有一个数据帧,我正在尝试绘制。我希望数据点在我的图中沿 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

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

  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')) +
...

我无法reorder()工作,但我能够使用scale_x_discrete()来控制订单。 请参阅 https://stackoverflow.com/a/63578556/7685

相关内容

  • 没有找到相关文章

最新更新