您可以传递plt.scatter
一个c
参数,让您选择颜色。下面的代码定义了一个colors
词典,用于将您的钻石颜色映射到绘图颜色。
import matplotlib.pyplot as plt
import pandas as pd
carat = [5, 10, 20, 30, 5, 10, 20, 30, 5, 10, 20, 30]
price = [100, 100, 200, 200, 300, 300, 400, 400, 500, 500, 600, 600]
color =['D', 'D', 'D', 'E', 'E', 'E', 'F', 'F', 'F', 'G', 'G', 'G',]
df = pd.DataFrame(dict(carat=carat, price=price, color=color))
fig, ax = plt.subplots()
colors = {'D':'red', 'E':'blue', 'F':'green', 'G':'black'}
ax.scatter(df['carat'], df['price'], c=df['color'].apply(lambda x: colors[x]))
plt.show()
df['color'].apply(lambda x: colors[x])
有效地将颜色从“钻石”映射到“绘图”。
(原谅我没有放置另一个示例图像,我认为2就足够了:P)
用 seaborn
您可以使用seaborn
其中的一个包装器matplotlib
,使其在默认情况下看起来更漂亮(我基于观点,我知道:P),但是还添加了一些绘图功能。
为此,您可以使用seaborn.lmplot
with fit_reg=False
(这样可以防止它自动进行某些回归)。
以下代码使用示例数据集。通过选择,hue='color'
您可以告诉seaborn根据您的颜色拆分数据框,然后绘制每个数据框。
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
carat = [5, 10, 20, 30, 5, 10, 20, 30, 5, 10, 20, 30]
price = [100, 100, 200, 200, 300, 300, 400, 400, 500, 500, 600, 600]
color =['D', 'D', 'D', 'E', 'E', 'E', 'F', 'F', 'F', 'G', 'G', 'G',]
df = pd.DataFrame(dict(carat=carat, price=price, color=color))
sns.lmplot('carat', 'price', data=df, hue='color', fit_reg=False)
plt.show()
不seaborn
使用pandas.groupby
如果您不想使用seaborn,则可以使用它pandas.groupby
来单独获得颜色,然后仅使用matplotlib绘制颜色,但是您必须随行手动分配颜色,下面添加了一个示例:
fig, ax = plt.subplots()
colors = {'D':'red', 'E':'blue', 'F':'green', 'G':'black'}
grouped = df.groupby('color')
for key, group in grouped:
group.plot(ax=ax, kind='scatter', x='carat', y='price', label=key, color=colors[key])
plt.show()
此代码假定与上述相同的DataFrame,然后根据对其进行分组color
。然后,对这些组进行迭代,为每个组进行绘制。为了选择一种颜色,我创建了一个colors
字典,该字典可以将菱形颜色(例如D
)映射为真实颜色(例如red
)。