如何使用matplotlib根据类型对散点图上的各个点进行着色

时间:2018-03-08 14:15:42

标签: python matplotlib jupyter-notebook

我正在处理Iris数据并尝试使用散点图,而我能够获得输出,我想知道如何根据物种对点进行着色,使用matplotlib

我使用以下语法:

iris.plot.scatter(x='petal_length', y='petal_width') 
iris.plot(kind='scatter', x='sepal_length', y='sepal_width')

还有什么方法可以使用单行代码为sepal_length / width和petal_length / width创建两个散点图,同时根据物种进行着色?

1 个答案:

答案 0 :(得分:1)

在一次调用绘图函数中获得正确的颜色有点单调乏味。

<div class="modal">
  <div class="modal-dialog">
    <div class="modal-header">
    Lorem ipsum dolor sit amet
    </div>
    <div class="modal-content">
      Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
    </div>
  </div>
</div>

enter image description here

因此,我建议在物种上进行循环,这样可以轻松地将一个图例放入图中。

import seaborn as sns
iris = sns.load_dataset("iris")
import numpy as np
import matplotlib.pyplot as plt

u, inv = np.unique(iris.species.values, return_inverse=True)
ax = iris.plot.scatter(x='petal_length', y='petal_width', 
                  c=inv, cmap="brg", colorbar=False)

plt.show()

enter image description here

一个简单的解决方案也是使用seaborn。

import seaborn as sns
iris = sns.load_dataset("iris")
import matplotlib.pyplot as plt

for n, grp in iris.groupby("species"):
    plt.scatter(grp.petal_length, grp.petal_width, label=n)
plt.legend()
plt.show()

enter image description here