相关疑难解决方法(0)

如何将传说从情节中删除

我有一系列20个图(不是子图)可以在一个图中制作.我希望传说能够在盒子之外.同时,我不想改变轴,因为图形的大小减少了.请帮助我以下查询:

  1. 我想将情节框保留在情节区域之外.(我希望传说位于情节区域的右侧).
  2. 无论如何,我减少了图例框内文本的字体大小,因此图例框的大小会很小.

python matplotlib legend

866
推荐指数
15
解决办法
68万
查看次数

Matplotlib savefig与情节外的传奇

阅读下面的文章,我设法将一个传奇放在外面.

码:

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.

谢谢.

python matplotlib legend

34
推荐指数
3
解决办法
4万
查看次数

我的matplotlib.pyplot传奇正在被切断

我正在尝试使用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)

这会产生: 在此输入图像描述

python matplotlib

32
推荐指数
4
解决办法
3万
查看次数

如何在matplotlib中绘制内联线标签?

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

样线图

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

样本等高线图

我无法在matplotlib文档中找到如何执行此操作.有没有办法实现这个目标?如果没有,我可以用什么其他软件来生成这种类型的情节?

python plot label matplotlib contour

12
推荐指数
1
解决办法
5894
查看次数

更改标记的ticklabel方向和图例位置

我正在使用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轴刻度标签垂直方向,因此我无法读取文本.我外面的传说也被切断了.

我可以将刻度标签的方向更改为水平,然后调整整个图形以使图例可见吗?

在此输入图像描述

python matplotlib pandas

8
推荐指数
3
解决办法
1万
查看次数

如何将seaborn图例拆分为多列?

我使用具有不同色调和样式的 relplot,并希望显示各自的图例条目,而不是彼此下方。

所以目前我得到一个这样的传说:

relplot 图例的色调和样式标签彼此低于

相反,我希望有一个看起来像这样的图例:

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)

python matplotlib legend seaborn

6
推荐指数
2
解决办法
4428
查看次数

Python 情节外的图例 - matplotlib

我试图在 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 中是否有我遗漏的类似内容?

python matplotlib legend

5
推荐指数
1
解决办法
3754
查看次数

matplotlib + wxpython 的图例大小不正确

我在 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)

wxpython matplotlib

4
推荐指数
1
解决办法
2898
查看次数

matplotlib两个传说出了情节

我正面临着在情节之外展示两个传说的问题.剧情中显示多个传说很容易 - 它在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)

python plot matplotlib legend

3
推荐指数
1
解决办法
2594
查看次数

bbox_to_anchor() 函数的参数

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 。我无法理解该函数的前两个参数,所有文献都说是归一化轴参数。任何机构都可以解释它们是什么以及如何操纵它们吗?

python matplotlib legend-properties

3
推荐指数
2
解决办法
8114
查看次数

在 matplotlib 图中切割 X 和 Y 标签

我有这个代码:

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 python-3.x pandas

3
推荐指数
1
解决办法
8836
查看次数