Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.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 3.x matplotlib中类似Category的绘图编号_Python 3.x_Pandas_Matplotlib - Fatal编程技术网

Python 3.x matplotlib中类似Category的绘图编号

Python 3.x matplotlib中类似Category的绘图编号,python-3.x,pandas,matplotlib,Python 3.x,Pandas,Matplotlib,我有一个csv,看起来像这样: 2 1111 4 926 8 914 16 933 32 911 64 912 128 1010 256 1010 512 1013 1024 1070 1025 921 1026 921 1027 920 1028 918 1029 917 1030 916 1031 922 1032 927 1033 929 1034 924 2048 1048 第一列是X,第二列是Y

我有一个csv,看起来像这样:

2   1111
4   926
8   914
16  933
32  911
64  912
128 1010
256 1010
512 1013
1024    1070
1025    921
1026    921
1027    920
1028    918
1029    917
1030    916
1031    922
1032    927
1033    929
1034    924
2048    1048
第一列是X,第二列是Y

当我试图绘制它时,matplotlib会将它视为数字,从而给出间隔

我更喜欢将第一列视为分类(2,4,8,…,2048),每个x值之间的距离相同

我尝试将X转换为分类,但matplotlib仍将其视为数字:

x = pd.Series(line_data["element"]).astype("category")
plt.scatter(x, line_data["time"])
我还尝试将X转换为字符串,但它被排序,从而使图形出错

解决这个问题的最佳方法是什么


非常感谢

Matplotlib自当前版本起不能处理分类数据类型

您可以选择:

  • 使用字符串
    (如问题中所指出的)此解决方案将在matplotlib 2.2或更高版本中工作

    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    df = pd.DataFrame({"x" : np.logspace(0,11,12, base=2).astype(int),
                       "y" : np.random.randint(900,1200,12)})
    plt.plot(df.x.astype(str),df.y)
    plt.show()
    
  • 绘制数据索引
    并根据这些值设置标签

    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    df = pd.DataFrame({"x" : np.logspace(0,11,12, base=2).astype(int),
                       "y" : np.random.randint(900,1200,12)})
    plt.plot(df.index,df.y)
    plt.xticks(df.index, df.x)
    plt.show()
    
在这两种情况下,情节看起来都像


自当前版本起,Matplotlib可以不处理分类数据类型

您可以选择:

  • 使用字符串
    (如问题中所指出的)此解决方案将在matplotlib 2.2或更高版本中工作

    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    df = pd.DataFrame({"x" : np.logspace(0,11,12, base=2).astype(int),
                       "y" : np.random.randint(900,1200,12)})
    plt.plot(df.x.astype(str),df.y)
    plt.show()
    
  • 绘制数据索引
    并根据这些值设置标签

    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    df = pd.DataFrame({"x" : np.logspace(0,11,12, base=2).astype(int),
                       "y" : np.random.randint(900,1200,12)})
    plt.plot(df.index,df.y)
    plt.xticks(df.index, df.x)
    plt.show()
    
在这两种情况下,情节看起来都像


后一种方法非常有效。如果我将X转换为str,Matplotlib仍然会对X进行排序。我想知道为什么它不会在您的计算机中发生。答案“此解决方案将在Matplotlib 2.2或更高版本中工作。”中指出。关于这一点,到底有什么不清楚的地方?我对没有正确阅读它感到遗憾,感谢您指出这一点!后者工作得很好。如果我将X转换为str,Matplotlib仍然会对X进行排序。我想知道为什么它不会在您的计算机中发生。答案“此解决方案将在Matplotlib 2.2或更高版本中工作。”中指出。关于这一点,到底有什么不清楚的地方?我对没有正确阅读它感到遗憾,感谢您指出这一点!