Rau*_*anu 4 python matplotlib pandas
我的 DataFrame 的结构
trx.columns
Index(['dest', 'orig', 'timestamp', 'transcode', 'amount'], dtype='object')
Run Code Online (Sandbox Code Playgroud)
我正在尝试绘制transcode(交易代码)以amount查看每笔交易花费了多少钱。我确保转换transcode为分类类型,如下所示。
trx['transcode']
...
Name: transcode, Length: 21893, dtype: category
Categories (3, int64): [1, 17, 99]
Run Code Online (Sandbox Code Playgroud)
我这样做得到的结果plt.scatter(trx['transcode'], trx['amount'])是
虽然上面的图并不完全错误,但我希望 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()
Run Code Online (Sandbox Code Playgroud)
为了在 matplotlib <=2.0 中获得相同的结果,我们将针对某个索引进行绘图。
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()
Run Code Online (Sandbox Code Playgroud)
使用seaborn 可以获得相同的图stripplot:
sns.stripplot(x="x", y="y", data=df)
Run Code Online (Sandbox Code Playgroud)
并且可以通过seaborn 完成一个可能更好的表示swarmplot:
sns.swarmplot(x="x", y="y", data=df)
Run Code Online (Sandbox Code Playgroud)