Python 3.x matplotlib中类似Category的绘图编号
我有一个csv,看起来像这样: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
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或更高版本中工作。”中指出。关于这一点,到底有什么不清楚的地方?我对没有正确阅读它感到遗憾,感谢您指出这一点!