当前位置: 首页 > 知识库问答 >
问题:

以尽可能简单的方式向Matplotlib中的PyPlot添加图例

呼延哲
2023-03-14

TL;博士-

请考虑下面的绘图脚本:

if __name__ == '__main__':
    PyPlot.plot(total_lengths, sort_times_bubble, 'b-',
                total_lengths, sort_times_ins, 'r-',
                total_lengths, sort_times_merge_r, 'g+',
                total_lengths, sort_times_merge_i, 'p-', )
    PyPlot.title("Combined Statistics")
    PyPlot.xlabel("Length of list (number)")
    PyPlot.ylabel("Time taken (seconds)")
    PyPlot.show()

如您所见,这是matplotlibPyPlot的一个非常基本的用法。理想情况下,这会生成如下所示的图形:

没什么特别的,我知道。然而,目前还不清楚哪些数据被绘制在哪里(我试图绘制一些排序算法的数据,长度与所用时间的关系,我想确保人们知道哪一行是哪一行)。因此,我需要一个传说,但是,看看下面的例子(从官方网站):

ax = subplot(1,1,1)
p1, = ax.plot([1,2,3], label="line 1")
p2, = ax.plot([3,2,1], label="line 2")
p3, = ax.plot([2,3,1], label="line 3")

handles, labels = ax.get_legend_handles_labels()

# reverse the order
ax.legend(handles[::-1], labels[::-1])

# or sort them by labels
import operator
hl = sorted(zip(handles, labels),
            key=operator.itemgetter(1))
handles2, labels2 = zip(*hl)

ax.legend(handles2, labels2)

您将看到我需要创建一个额外的变量ax。如何在不创建这个额外变量的情况下将图例添加到我的图中,并保持当前脚本的简单性?

共有3个答案

宰父飞白
2023-03-14

这里有一个例子来帮助你。。。

fig = plt.figure(figsize=(10,5))
ax = fig.add_subplot(111)
ax.set_title('ADR vs Rating (CS:GO)')
ax.scatter(x=data[:,0],y=data[:,1],label='Data')
plt.plot(data[:,0], m*data[:,0] + b,color='red',label='Our Fitting 
Line')
ax.set_xlabel('ADR')
ax.set_ylabel('Rating')
ax.legend(loc='best')
plt.show()
宰父志新
2023-03-14

您可以使用plt访问Axes实例(ax)。gca()。在这种情况下,您可以使用

plt.gca().legend()

您可以通过在每个plt.plot()调用中使用标签=关键字来实现这一点,或者通过在图例中将标签分配为元组或列表来实现这一点,如以下示例:

import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-0.75,1,100)
y0 = np.exp(2 + 3*x - 7*x**3)
y1 = 7-4*np.sin(4*x)
plt.plot(x,y0,x,y1)
plt.gca().legend(('y0','y1'))
plt.show()

但是,如果需要多次访问Axis实例,我建议将其保存到变量axwith

ax = plt.gca()

然后调用ax而不是plt。gca()

明利
2023-03-14

添加一个标签=到每个图()调用,然后调用图例(loc='左上')

考虑这个样本(用Python 3.8.测试):

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 20, 1000)
y1 = np.sin(x)
y2 = np.cos(x)

plt.plot(x, y1, "-b", label="sine")
plt.plot(x, y2, "-r", label="cosine")
plt.legend(loc="upper left")
plt.ylim(-1.5, 2.0)
plt.show()
 类似资料:
  • 我需要最简单的方法将项目添加到Java数组的前面。 我需要Java数组而不是ArrayList。

  • 我想用一个AJax请求填充一个表(DataTables 我的请求ajax返回Json,但不可能填满表,我有以下错误: DataTables警告:table ID=DT-Table-为第1行第0列请求未知参数“0”。有关此错误的详细信息,请参阅http://datatables.net/TN/4 我的桌子: 我的JS: ajax响应: 我的请求: 我看不出问题出在哪里,我查看了DataTables文

  • 问题内容: 给定,坐标和一行文本,如何添加带有任何普通固定字体的简单标签?例如来自。 对齐并不是很重要,但是最好是将标签写在以坐标为起点的线上方。 而且我想避免字体等外部可加载依赖项。 问题答案: 该包只定义了字体面和在图像上绘制文本接口。 您可以使用Go执行FreeType字体光栅化的:。 密钥类型为,它具有您需要的所有方法。 有关完整的示例,请签出以下文件:。本示例加载字体文件,创建和配置,在

  • 问题内容: 我经常对Python列表进行矢量加法。 示例:我有两个这样的列表: 我现在想将b添加到a以获得结果。 通常我最终会这样: 有没有什么有效的,标准的方法可以减少打字? 更新:可以假定列表的长度为3,并且包含浮点数。 问题答案: 我认为您找不到比问题中提出的3个总和更快的解决方案。numpy的优点对于较大的矢量以及在需要其他运算符时都是显而易见的。numpy对于矩阵特别有用,而python

  • 我通常使用以下软件包创建绘图:。但是,还有一个名为。 在使用它们时,我无法发现两者之间的任何区别。所以我的问题如下: 包。在哪种情况下,你会建议一种而不是另一种?

  • 问题内容: 我正在尝试保存使用matplotlib创建的图;但是,图像保存为空白。 这是我的代码: tessstttyyy.png为空白(也尝试使用.jpg) 问题答案: 首先,什么时候发生?我会测试一下,然后再调整传递给的值;可以尝试输入值131、132和133,或者取决于是否存在的值。 其次,在调用之后,创建一个新图形。为了解决这个问题,您可以 致电之前致电 通过调用“获取当前图形”来保存图形