Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在hist命令中更改绘图顺序_Python_Pandas_Matplotlib - Fatal编程技术网

Python 如何在hist命令中更改绘图顺序

Python 如何在hist命令中更改绘图顺序,python,pandas,matplotlib,Python,Pandas,Matplotlib,我试图为一个数据帧绘制一组直方图,该数据帧有25列,分别命名为“Feature\u 1”、“Feature\u 2”、“Feature\u 25”。当我使用df.hist()时,它会按名称对各个直方图进行排序,以便按以下顺序绘制:“Feature_1”、“Feature_10”、“Feature_11”…“Feature_2”、“Feature_20”… 这不是我需要的 如何更改排序顺序?传递columns参数不会更改任何内容 我通过直接使用matplotlib解决了这个问题,但这不是每次需要绘

我试图为一个数据帧绘制一组直方图,该数据帧有25列,分别命名为
“Feature\u 1”、“Feature\u 2”、“Feature\u 25”
。当我使用
df.hist()
时,它会按名称对各个直方图进行排序,以便按以下顺序绘制:
“Feature_1”、“Feature_10”、“Feature_11”…“Feature_2”、“Feature_20”…
这不是我需要的

如何更改排序顺序?传递columns参数不会更改任何内容


我通过直接使用matplotlib解决了这个问题,但这不是每次需要绘制多个直方图时我都愿意做的。

您可以使用单个列重复调用hist。不确定这是否满足您的所有需要

import pandas as pd

df = pd.DataFrame({'a':[1,1,1,1,3],
                  'b':[1,1,2,1,3],
                  'c':[2,2,2,1,3],
                  })

df[['c']].hist()
df[['a']].hist()
df[['b']].hist()
只需按照您希望的顺序遍历列列表

my_list = ['c','a','b']
for each in my_list:
    df[[each]].hist()

尝试将列索引分类,然后使用sort_列打印为True

将熊猫作为pd导入
df=pd.DataFrame({'a':[1,2],'b':[30,10]})
df.columns=pd.CategoricalIndex(['b','a'],ordered=True)
df.plot.hist(sort_columns=True,subplot=True)

您可以使用带有自定义排序键的df.reindex\u axis提前对列进行排序。然后列可以按照您想要的顺序排列。例如:

df = pd.DataFrame({'Feature_1':[1,2,3],'Feature_10':[1,2,3],'Feature_2':[2,3,4]})
print df
df = df.reindex_axis(sorted(df.columns, key=lambda a: int(a.split('_')[1])), axis=1)
print df
给你

Feature_1  Feature_10  Feature_2
0          1           1          2
1          2           2          3
2          3           3          4
   Feature_1  Feature_2  Feature_10
0          1          2           1
1          2          3           2
2          3          4           3
然后绘制直方图

df.plot.hist(sort_columns=False, subplots=True)

虽然很烦人,但您能否重命名列
Feature\u 01
Feature\u 02
,..?虽然这可以解决此特定情况下的问题,但当我们有多个名称无序的列时,通常无法解决此问题。不幸的是,此问题已硬编码到
pandas.DataFrame.hist
中。show如果您的列是可排序的,它将使用vanilla
sorted(columns)
对它们进行排序。似乎没有关键字来更改此行为。嗯……谢谢。我明白了。不知道这种行为有什么好处。