Pandas / Pyplot中的散点图:如何使用不同的标记按类别绘图

时间:2014-12-30 19:06:38

标签: python matplotlib pandas

在此前一个问题的基础上:Scatter plots in Pandas/Pyplot: How to plot by category

以下代码是该帖子的解决方案,并将每个组绘制为不同的颜色。如何将每个群体绘制为不同的标记?

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
np.random.seed(1974)

# Generate Data
num = 20
x, y = np.random.random((2, num))
labels = np.random.choice(['a', 'b', 'c'], num)
df = pd.DataFrame(dict(x=x, y=y, label=labels))

groups = df.groupby('label')

# Plot
fig, ax = plt.subplots()
ax.margins(0.05) # Optional, just adds 5% padding to the autoscaling
for name, group in groups:
    ax.plot(group.x, group.y, marker='o', linestyle='', ms=12, label=name)
ax.legend()

plt.show()

1 个答案:

答案 0 :(得分:2)

在迭代群组时,您可以使用zip迭代标记列表。下面的代码将遍历markers列表,并依次使用marker=marker行中的ax.plot分配每个元素。

我还添加了itertools.cycle,这会导致迭代在到达结束时进入开头,这意味着如果你有超过3组,那么它就不会失败。如果你有4个组,那么标记就是'x', 'o', '^', 'x',例如。

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
np.random.seed(1974)

from itertools import cycle

# Generate Data
num = 20
x, y = np.random.random((2, num))
labels = np.random.choice(['a', 'b', 'c'], num)
df = pd.DataFrame(dict(x=x, y=y, label=labels))

groups = df.groupby('label')

markers = ['x', 'o', '^']

# Plot
fig, ax = plt.subplots()
ax.margins(0.05) # Optional, just adds 5% padding to the autoscaling
for (name, group), marker in zip(groups, cycle(markers)):
    ax.plot(group.x, group.y, marker=marker, linestyle='', ms=12, label=name)
ax.legend()

plt.show()

Example plot