以鸢尾花散点图为例,plot如何自动添加图例legend信息?
发布于 作者:苏南大叔 来源:程序如此灵动~

继续描述基于python
的plot
画图代码,当然matplotlib.pyplot
里面的功能函数参数太多太复杂了。苏南大叔这边就是碰到哪个就讲解一下哪个,用不到的就当不存在好了。本文主要描述给鸢尾花散点图添加个自动的图例信息,使用的函数是.legend()
。
苏南大叔的“程序如此灵动”博客,记录苏南大叔的编程经验文章。本文测试环境:win10
,python@3.11.0
,pandas@1.5.3
,numpy@1.24.2
,matplotlib@3.7.1
。
legend
:传奇。但是在这边就是图例的意思。
测试代码
如何基于鸢尾花数据集画散点图,可以参考文章:
下面直接上代码,具体的代码解释,可以参考上面的文章。测试代码如下:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
data_url = "http://download.tensorflow.org/data/iris_training.csv"
column_names = ["萼长", "萼宽", "瓣长", "瓣宽", "种类"]
df_iris = pd.read_csv(data_url, header=0, names=column_names)
data_x = np.array(df_iris["萼长"])
data_y = np.array(df_iris["萼宽"])
data_z = np.array(df_iris["种类"])
fig = plt.figure("鸢尾花散点图示例", figsize=(15, 15))
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False
plt.suptitle("鸢尾花数据集\n蓝色->setosa|红色->versicolor|绿色->virginica")
plt.xlabel(column_names[0])
plt.ylabel(column_names[1])
plt.title(column_names[0] + "、" + column_names[1] + "数据关联散点图")
# 看这里 ###########################################################
p1 = plt.scatter(data_x, data_y, c=data_z, cmap="brg")
plt.legend(handles=p1.legend_elements()[0], labels=["山鸢尾", "变色鸢尾", "维吉尼亚鸢尾"], loc='best', shadow=True, fontsize=16)
# 看这里 ###########################################################
plt.savefig("scatter.png")
plt.show()
散点图图例关键代码
在本文中,鸢尾花一共有三种花,分别是:
中文名 | 英文名 | 数据分类 | 图中的颜色 |
---|---|---|---|
山鸢尾 | setosa | 分类0 | 蓝色 |
变色鸢尾 | versicolor | 分类1 | 红色 |
维吉尼亚鸢尾 | virginica | 分类2 | 绿色 |
在上边的散点图中,使用了带颜色的圆点进行了区分。那么,每种颜色都具体代表什么花呢?这就是鸢尾花散点图中图例的作用。修改代码如下:
q1 = plt.scatter(data_x, data_y, c=data_z, cmap="brg")
plt.legend(handles=q1.legend_elements()[0], labels=["山鸢尾", "变色鸢尾", "维吉尼亚鸢尾"], loc='best', shadow=True, fontsize=16)
主要的参数就是handles
和labels
,看看这个q1.legend_elements()
是个什么东东。
([<matplotlib.lines.Line2D object at 0x0000016BD453B0B8>, <matplotlib.lines.Line2D object at 0x0000016BD453B208>, <matplotlib.lines.Line2D object at 0x0000016BD453B2B0>], ['$\\mathdefault{0}$', '$\\mathdefault{1}$', '$\\mathdefault{2}$'])
所以,可以看到:本文的鸢尾花数据集散点图中,图例关联的对象就是:
matplotlib.lines.Line2D object
其余的参数就留给默认的就好了,不解释。
结束语
matplotlib.pyplot
画图,在做论文的图的时候,可能是很有用的技能。


