我有一系列20个图(不是子图)可以在一个图中制作.我希望传说能够在盒子之外.同时,我不想改变轴,因为图形的大小减少了.请帮助我以下查询:
阅读下面的文章,我设法将一个传奇放在外面.
码:
import matplotlib.pyplot as pyplot
x = [0, 1, 2, 3, 4]
y = [xx*xx for xx in x]
fig = pyplot.figure()
ax = fig.add_subplot(111)
box = ax.get_position()
ax.set_position([box.x0, box.y0, box.width*0.8, box.height])
ax.plot(x, y)
leg = ax.legend(['abc'], loc = 'center left', bbox_to_anchor = (1.0, 0.5))
#pyplot.show()
fig.savefig('aaa.png', bbox_inches='tight')
Run Code Online (Sandbox Code Playgroud)
pyplot.show()显示正确的情节,外面有一个图例.但是当我将其保存为文件时fig.savefig(),图例会被截断.
一些谷歌搜索显示我作为变通方法添加这样bbox_extra_artists=[leg.legendPatch]或bbox_extra_artists=[leg]至savefig(),但既不工作.
这样做的正确方法是什么?Matplotlib版本为0.99.3.
谢谢.
我正在尝试使用matplotlib创建一个带有图例的图表.我可以看到正在创建绘图,但图像边界不允许显示整个图例.
lines = []
ax = plt.subplot(111)
for filename in args:
lines.append(plt.plot(y_axis, x_axis, colors[colorcycle], linestyle='steps-pre', label=filename))
ax.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.)
Run Code Online (Sandbox Code Playgroud)
这会产生:

我有以下图表,包括几行:

现在,我想标记情节中的所有线条.但是,legend()在框中将所有标签一起使用,这使得情节难以解释.我想要的是使用内联标签.我的理想输出将使用类似下面的matplotlib等高线图,但带有行的文本标签而不是数字:

我无法在matplotlib文档中找到如何执行此操作.有没有办法实现这个目标?如果没有,我可以用什么其他软件来生成这种类型的情节?
我正在使用Python中的pandas从CSV读取数据来绘制条形图.我将CSV读入a DataFrame并使用matplotlib绘制它们.
以下是我的CSV的外观:
SegmentName Sample1 Sample2 Sample3
Loop1 100 100 100
Loop2 100 100 100
Run Code Online (Sandbox Code Playgroud)
res = DataFrame(pd.read_csv("results.csv", index_col="SegmentName"))
Run Code Online (Sandbox Code Playgroud)
我绘制并将传奇设置为外部.
plt.figure()
ax = res.plot(kind='bar')
ax.legend(loc='center left', bbox_to_anchor=(1, 0.5))
plt.savefig("results.jpg")
Run Code Online (Sandbox Code Playgroud)
但是,x轴刻度标签垂直方向,因此我无法读取文本.我外面的传说也被切断了.
我可以将刻度标签的方向更改为水平,然后调整整个图形以使图例可见吗?

我使用具有不同色调和样式的 relplot,并希望显示各自的图例条目,而不是彼此下方。
所以目前我得到一个这样的传说:
相反,我希望有一个看起来像这样的图例:
如何才能做到这一点?
我尝试设置以下但没有效果:
plot._legend
leg._ncol = 2
leg.handleheight = 1 # restricting the height
Run Code Online (Sandbox Code Playgroud)
解决此问题的最小工作示例:
import pandas as pd
import seaborn as sns
columns = ['category1', 'category2', 'category3', 'time', 'value']
data = [['content1', 'other1', 'critera1', 0, 0.1], ['content1', 'other1', 'critera1', 1, 0.4], ['content1', 'other1', 'critera1', 2, 0.7], ['content2', 'other1', 'critera1', 0, 0.2], ['content2', 'other1', 'critera1', 1, 0.6], ['content2', 'other1', 'critera1', 2, 0.8], ['content1', 'other2', 'critera1', 0, 0.0], ['content1', 'other2', 'critera1', 1, 0.2], ['content1', 'other2', 'critera1', 2, 0.8], …Run Code Online (Sandbox Code Playgroud) 我试图在 matplotlib 的情节之外放置一个相当广泛的图例。图例有很多条目,每个条目都可能很长(但我不知道具体有多长)。
显然,这很容易使用
legendHandle = plt.legend(loc = "center left", bbox_to_anchor = (1, 0.5))
Run Code Online (Sandbox Code Playgroud)
但问题是图例被窗口边缘切断了。我花了很长时间寻找解决方案。到目前为止,我能找到的最好的事情是:
box = ax.get_position()
ax.set_position([box.x0, box.y0, box.width * 0.8, box.height])
plt.legend(loc = "center left", bbox_to_anchor = (1, 0.5))
Run Code Online (Sandbox Code Playgroud)
不幸的是,这并不能真正解决我的问题。由于显式因子 0.8 应用于框宽度,这仅适用于图形和图例宽度的一种特定组合。如果我调整图形窗口的大小,或者如果我的图例条目具有不同的长度,则它不起作用。
我只是不明白如何在图形之外放置一个图例会如此困难。我已经习惯了 Matlab,就这么简单
legend('Location', 'eastoutside')
Run Code Online (Sandbox Code Playgroud)
Python 中是否有我遗漏的类似内容?
我在 wxpython 框架中嵌入了一个 matplotlib 图形,并带有几个 sizer。一切正常,直到我包含一个图例,但随后 sizer 似乎并没有与图例一起工作。
即使我通过在角落处拖动来调整窗口大小,主图形也会改变大小,但只显示图例的边缘。

也就是说,请注意图例在 wxFrame 中不可见。
import wx
import matplotlib as mpl
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as Canvas
from random import shuffle
class PlotFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, -1, title="Plot", size=(-1, -1))
self.main_panel = wx.Panel(self, -1)
self.plot_panel = PlotPanel(self.main_panel)
s0 = wx.BoxSizer(wx.VERTICAL)
s0.Add(self.main_panel, 1, wx.EXPAND)
self.SetSizer(s0)
self.s0 = s0
self.main_sizer = wx.BoxSizer(wx.VERTICAL)
self.main_sizer.Add(self.plot_panel, 1, wx.EXPAND)
self.main_panel.SetSizer(self.main_sizer)
class PlotPanel(wx.Panel):
def __init__(self, parent, id = -1, dpi = None, **kwargs):
wx.Panel.__init__(self, parent, id=id, **kwargs)
self.figure = …Run Code Online (Sandbox Code Playgroud) 我正面临着在情节之外展示两个传说的问题.在剧情中显示多个传说很容易 - 它在matplotlib doc中用例子描述.甚至在情节之外显示一个传说也很容易,就像我在stackoverflow上找到的那样(例如这里).但我找不到工作的例子来展示情节之外的两个传说.在这种情况下,使用一个图例的方法不起作用.
这是一个例子.首先是基本代码:
import matplotlib.pyplot as plt
import matplotlib.patches as patches
from matplotlib.lines import Line2D
from matplotlib.font_manager import FontProperties
fig1 = plt.figure(figsize=(17,5))
fontP = FontProperties()
fontP.set_size('small')
ax1 = fig1.add_subplot(111, aspect='equal')
ax1.grid()
# stuff for legend
rec1 = patches.Rectangle(
(0.9, 0.25), # (x,y)
0.1, # width
0.1, # height
label='rectangle',
**{
'color': 'blue'
}
)
ax1.add_patch(rec1)
leg = plt.legend(handles=[rec1], bbox_to_anchor=(0.7, -0.1))
fig1.savefig('sample1.png', dpi=90, bbox_inches='tight')
Run Code Online (Sandbox Code Playgroud)
但现在我想在情节的右侧绘制另一个传奇.这是代码:
...
ax1.add_patch(rec1)
l1 = plt.legend(prop=fontP, handles=[rec1], loc='center left',
box to_anchor=(1.0, …Run Code Online (Sandbox Code Playgroud) import matplotlib.pyplot as plt
import numpy as np
x = np.arange(10)
fig = plt.figure()
ax = plt.subplot(111)
for i in xrange(5):
ax.plot(x, i * x, label='$y = %ix$' % i)
ax.legend(bbox_to_anchor=(1.1, 1.05))
plt.show()
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,我遇到了将图例置于任意位置的函数 bbox_to_anchor 。我无法理解该函数的前两个参数,所有文献都说是归一化轴参数。任何机构都可以解释它们是什么以及如何操纵它们吗?
我有这个代码:
import pandas as pd
from pandas import datetime
from pandas import DataFrame as df
import matplotlib
from pandas_datareader import data as web
import matplotlib.pyplot as plt
import datetime
start = datetime.date(2016,1,1)
end = datetime.date.today()
stock = 'fb'
fig = plt.figure(dpi=1400)
data = web.DataReader(stock, 'yahoo', start, end)
fig, ax = plt.subplots(dpi=720)
data['vol_pct'] = data['Volume'].pct_change()
data.plot(y='vol_pct', ax = plt.gca(), title = 'this is the title \n second line')
ax.set(xlabel="Date")
ax.legend(loc='upper center', bbox_to_anchor=(0.32, -0.22), shadow=True, ncol=2)
plt.savefig('Test')
Run Code Online (Sandbox Code Playgroud)
在图的底部,您可以看到图例被删除。在我正在处理的不同代码的另一个图中,ylabel当我使用保存图时,甚至也被剪切了plt.savefig('Test') …
matplotlib ×11
python ×9
legend ×5
pandas ×2
plot ×2
contour ×1
label ×1
python-3.x ×1
seaborn ×1
wxpython ×1