我的DataFrame的结构
trx.columns
Index(['dest', 'orig', 'timestamp', 'transcode', 'amount'], dtype='object')
我正在尝试针对
transcode
绘制amount
(交易代码),以查看每笔交易花费了多少钱。我确保将transcode
转换为如下所示的分类类型。trx['transcode']
...
Name: transcode, Length: 21893, dtype: category
Categories (3, int64): [1, 17, 99]
我从
plt.scatter(trx['transcode'], trx['amount'])
得到的结果是Scatter plot
尽管上面的图并不完全错误,但我希望X轴仅包含
transcode
[1,17,99]的三个可能值,而不是整个[1,100]范围。谢谢!
最佳答案
在matplotlib 2.1中,您可以使用字符串来绘制分类变量。即如果将x值的列作为字符串提供,它将把它们识别为类别。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df = pd.DataFrame({"x" : np.random.choice([1,17,99], size=100),
"y" : np.random.rand(100)*100})
plt.scatter(df["x"].astype(str), df["y"])
plt.margins(x=0.5)
plt.show()
为了在matplotlib
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df = pd.DataFrame({"x" : np.random.choice([1,17,99], size=100),
"y" : np.random.rand(100)*100})
u, inv = np.unique(df["x"], return_inverse=True)
plt.scatter(inv, df["y"])
plt.xticks(range(len(u)),u)
plt.margins(x=0.5)
plt.show()
可以使用seaborn的
stripplot
获得相同的图:sns.stripplot(x="x", y="y", data=df)
可以通过seaborn的
swarmplot
进行更好的表示:sns.swarmplot(x="x", y="y", data=df)