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

在通过Matplotlib[duplicate]导出时,图形图例被剪切

郝池暝
2023-03-14

我正在使用一个matplotlib创建的多行图,该图具有这样一个延伸到图形边界之外的外部图例。

我的code

dataset = [1,2,3,4,5]
y_axis = np.arange(0,20,5)

plt.figure(figsize=(7,5))

A = [1,3,7,8,9]
B = [12,16,14,7,4]
C = [4,17,19,8,6]

plt.plot(dataset,A ,label='A',color='#FFC000',linewidth=3,marker='.',markersize=12,linestyle='-')
plt.plot(dataset,B,label='B',color='#0070C0',linewidth=3,marker='s',markersize=8,linestyle='-')
plt.plot(dataset,C,label='C',color='#404040',linewidth=3,marker='+',markersize=10,linestyle='-')


plt.xticks(dataset)
plt.yticks(y_axis)

plt.xlabel('JobID')
plt.ylabel('Profite')

axes = plt.gca()
axes.yaxis.grid()

plt.legend(bbox_to_anchor=(1.20, 0.6),loc='best')


plt.savefig('Figure.jpg',dpi=300)
files.download("Figure.jpg") 

plt.show()

不幸的是,在使用savefigdownload命令下载图形时,图例从导出的图像中被切掉。

使用此Colab Link(在最后一个单元格中),您可以更清楚地看到问题。

请提出解决方案。

共有1个答案

郎伟兆
2023-03-14

使用紧凑的布局:

# plt.legend(bbox_to_anchor=(1.20, 0.6),loc='best')
# plt.savefig('Figure.jpg',dpi=300)

plt.legend(bbox_to_anchor=(1.04,0.5), loc="center left", borderaxespad=0)
plt.tight_layout(rect=[0,0,0.95,1])
plt.savefig("output.png", bbox_inches="tight")
 类似资料:
  • 我正在绘图中绘制多个多边形: 结果图正确地显示了我的多边形,但我想知道哪个多边形对应于图上的哪个索引(例如:绿色多边形是处的多边形)。理想情况下,我想要一个将多边形的颜色与其索引关联起来的图例,但我不知道如何在这样的循环中添加这样的图例。我试过但这不起作用。 多边形的数量是可变的,所以严格分配颜色是不可能的。 如何添加图例?

  • 绘制一个圆环图,轴外有两个图例(第一个图例-在图形右侧,第二个-在底部)。 通过考虑两个图例的尺寸,对图形进行紧凑布局。

  • 我有几个绘图函数,每个函数都接收不同类型的数据并用自己的标题和图例进行绘图。然而,当我试图在同一个图形上绘制它们时,前一个图形被覆盖。 我知道这样做的一种方法是调用,但是由于图例是在函数内部创建的,所以这似乎是不可能的。是否有任何类型的可以执行此操作?从每个绘图中检索图例并在图形上显示它们?我应该从每个函数返回图例吗? 这是我所拥有的简化代码: 我不确定这是否是最好的方法,但由于我多次使用这些绘图

  • 我需要注释水平条形图。我能够使用matplotlib网站上显示的示例来注释垂直条形图,但是对于 horizonatl 的类似想法似乎不起作用。 以下是垂直方向的小型工作示例: 以下是我想要使用的代码,但不适用于水平图形 感谢任何帮助,提前感谢!

  • 假设我想画一个非常简单的图,其中2个子图水平排列,我想在第二个子图的右边添加一些文本。我在Jupyter笔记本电脑上工作,但这不会改变任何事情: 但是,当我试图导出图形时,右边的文本会被剪切: 使用,会使问题变得更糟。 我怎样才能最好地解决这个问题?

  • 问题内容: 我真的很难理解如何在PyQt中使用线程。我做了一个简单的示例,说明我想在UI中执行的操作。在下面的代码中,我希望用户输入一个股票行情自动收录器(例如,您可以输入“ bby”,“ goog”或“ v”)并绘制特定时期内的股票价值。问题是在更复杂的Ui中,或者很长一段时间UI冻结,而绘图正在更新。于是我做了一个“绘图仪”类更新时收到一定的信号(覆盖Qthread.run显然是不正确的做法情