相关疑难解决方法(0)

Matplotlib自动传说外图

我试图bbox_to_anchor()在Python的matplotlib图中使用关键字.

这是我制作的一个非常基本的情节:

import matplotlib.pyplot as plt
x = [1,2,3]
plt.subplot(211)
plt.plot(x, label="test1")
plt.plot([3,2,1], label="test2")
plt.legend(bbox_to_anchor=(0, -0.15, 1, 0), loc=2, ncol=2, mode="expand", borderaxespad=0)
plt.show()
Run Code Online (Sandbox Code Playgroud)

它基于以下示例:http: //matplotlib.org/users/legend_guide.html#plotting-guide-legend

我正在尝试使用自动将图例放置在绘图之外bbox_to_anchor().在此示例中,bbox_to_anchor()列出了4个参数.

在此特定示例(上图)中,图例位于图表下方,因此每次更改图表时需要手动输入数字-0.15(字体大小,轴标题删除等). 是否可以针对以下情况自动计算这4个数字?:

  1. 传说下面的情节
  2. 传说上面的情节
  3. 情节右侧的传说

如果没有,是否有可能在Python中对这些数字做出好的猜测?

此外,在上面的示例代码中,我将最后2个数字设置bbox_to_anchor()为1和0,因为我不明白它们是什么或它们如何工作.最后2个数字bbox_to_anchor()是什么意思?

python plot matplotlib legend legend-properties

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

Python - Legend与饼图重叠

在python中使用matplotlib.图例与我的饼图重叠.尝试了"loc"的各种选项,如"最佳",1,2,3 ...但无济于事.有关如何准确提及图例位置的任何建议(例如从饼图边界给出填充)或至少确保它不重叠?

python charts matplotlib

17
推荐指数
1
解决办法
2万
查看次数

控制图例中的行数

我目前正在尝试在单个地块上绘制大量数据.我使用重复的颜色和符号构建了我的表示.但是,在绘制最终结果时,图例会略微关闭,因为我无法控制其中的行数.因此,而不是得到5重复绿色,然后5重复红色,5重复蓝色然后2另外,我得到5 -4 -4 -4(我会优先5 - 5 - 5 - 2)

您可以在附加图像中清楚地看到这一点.

以错误的格式绘制彩色图例

现在我将这些选项用于图例:

axp.legend(loc="lower right",ncol=4)
Run Code Online (Sandbox Code Playgroud)

matplotlib legend

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

matplotlib - 单独子图中的图例

我正在绘制一组饼图,每个饼图对相同的两种类型的数据使用相同的两种颜色.

plt.figure(num=None, figsize=(6, 8))
for i in range(len(data_1)):
    plt.subplot(sp_rows, sp_cols, i+1)
    fracs = [data_1[i], data_2[i]]
    plt.pie(fracs, autopct='%1.1f%%')

pp.savefig()
Run Code Online (Sandbox Code Playgroud)

显然,为这些图表中的每一个绘制图例是没有意义的,因为它们都是相同的.那么有什么方法可以将一个图例最终绘制成一个单独的子图形?

python matplotlib legend

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

创建具有精确尺寸且没有填充的图形(以及轴外的图例)

我正在尝试为科学文章制作一些数字,所以我希望我的数字具有特定的大小.我还看到默认情况下Matplotlib在图形的边框上添加了大量填充,这是我不需要的(因为无论如何数字都将在白色背景上).

要设置一个特定的图形大小,我只需使用plt.figure(figsize = [w, h]),并添加参数tight_layout = {'pad': 0}以删除填充.这非常有效,如果我添加标题,y/x标签等,它甚至可以工作.示例:

fig = plt.figure(
    figsize = [3,2],
    tight_layout = {'pad': 0}
)
ax = fig.add_subplot(111)
plt.title('title')
ax.set_ylabel('y label')
ax.set_xlabel('x label')
plt.savefig('figure01.pdf')
Run Code Online (Sandbox Code Playgroud)

这将创建一个精确大小为3x2(英寸)的pdf文件.

figure01.png

我遇到的问题是,当我在轴外添加一个文本框(通常是一个图例框)时,Matplotlib不会像添加标题/轴标签时那样为文本框腾出空间.通常,文本框被截断,或者根本不显示在已保存的图中.例:

plt.close('all')
fig = plt.figure(
    figsize = [3,2],
    tight_layout = {'pad': 0}
)
ax = fig.add_subplot(111)
plt.title('title')
ax.set_ylabel('y label')
ax.set_xlabel('x label')
t = ax.text(0.7, 1.1, 'my text here', bbox = dict(boxstyle = 'round'))
plt.savefig('figure02.pdf')
Run Code Online (Sandbox Code Playgroud)

figure02.png

我在其他地方找到的解决方案是将参数添加bbox_inches = 'tight'到savefig命令.文本框现在包含在我想要的内容中,但pdf现在的大小错误.似乎Matplotlib只是使图形更大,而不是像添加标题和x/y标签时那样减小轴的大小.

例:

plt.close('all')
fig = plt.figure(
    figsize = [3,2], …
Run Code Online (Sandbox Code Playgroud)

matplotlib

9
推荐指数
2
解决办法
5340
查看次数

插入轴的具体位置

我想创建一组轴,以在父组轴的特定位置形成插入.因此,不宜只使用参数loc=1,2,3inset_axes,如下所示:

inset_axes = inset_axes(parent_axes,
                    width="30%", # width = 30% of parent_bbox
                    height=1., # height : 1 inch
                    loc=3)
Run Code Online (Sandbox Code Playgroud)

但是,我想要接近这一点.这里这里的答案似乎是比我复杂得多的问题的答案.

所以,问题是我可以在上面的代码中替换一个参数,它允许插入轴在父轴中的自定义位置吗?我试图使用bbox_to_anchor但不理解文档中的规范或行为.具体来说,我尝试过:

 inset_axes = inset_axes(parent_axes,
                        width="30%", # width = 30% of parent_bbox
                        height=1., # height : 1 inch
                        bbox_to_anchor=(0.4,0.1))
Run Code Online (Sandbox Code Playgroud)

尝试使插图的左侧和底部的锚点分别位于x轴和y轴的40%和10%处.或者,我试图把它放在绝对坐标中:

inset_axes = inset_axes(parent_axes,
                            width="30%", # width = 30% of parent_bbox
                            height=1., # height : 1 inch
                            bbox_to_anchor=(-4,-100))
Run Code Online (Sandbox Code Playgroud)

这些都没有正常工作,并给了我一个我无法解释的警告.

更一般地说,它似乎loc是属于许多函数的一个非常标准的参数matplotlib,因此,是否可以在任何地方使用这个问题的一般解决方案?看起来就是这样bbox_to_anchor但又一次,我无法弄清楚如何正确使用它.

python graph matplotlib

9
推荐指数
1
解决办法
4833
查看次数

在python中水平对齐条形图图例

我使用以下代码制作了一个多轴图,我无法按照自己的意愿排列图例.我的图表代码如下:

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(4)

y = [5, 7, 4, 9]
z = [9, 3, 5, 6]
r = [30, 40, 45, 37]


fig,ax = plt.subplots()

abc = ax.bar(x,y,0.25 )
cde = ax.bar(x+0.25,z,0.25)

ax.legend((abc[0], cde[0]), ('y', 'z'),bbox_to_anchor=(0., 1.02, 1, .102) , borderaxespad=0.)
ax.set_xticks(x + 0.25 / 2)
ax.set_xticklabels(('A', 'B', 'C', 'D'))

ax2 = ax.twinx()
efg = ax2.plot(x+0.25/2,r,color = 'black',label = "r")
ax2.legend(bbox_to_anchor=(0.11,1.07) , borderaxespad=0.)

plt.show()
Run Code Online (Sandbox Code Playgroud)

它显示的图表是这样的在此输入图像描述.

右上方的图例垂直对齐,但我希望它们水平对齐.我找不到任何关于此的文件.我希望它们如下图所示. 在此输入图像描述

谢谢

python matplotlib legend

7
推荐指数
1
解决办法
5306
查看次数

seaborn/matplotlib中的散点图,其中点大小和颜色由连续数据帧列给出

我想在seaborn/matplotlib中制作一个散点图,其中点的大小由数据帧中的(连续)值确定,点的颜色也由数据帧中另一列的连续值确定.在ggplot中,这样做的方法是:

ggplot(iris) + geom_point(aes(x=Sepal.Width, y=Sepal.Length, size=Petal.Width, color=Petal.Length))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述 (这里的颜色/尺寸是连续的非分类值)

seaborn/matplotlib中的语法是什么?

python matplotlib pandas

6
推荐指数
1
解决办法
5810
查看次数

Matplotlib:垂直展开图例

我有一个情节,其图例固定在右上角:如何展开图例以适应图表的高度?

borderaxespad=0. 会水平扩展它,但我找不到相当于垂直扩展它.

我正在使用matplotlib 2.0

示例代码:

import numpy as np

x = np.linspace(0, 2*np.pi, 100)
data = [np.sin(x * np.pi/float(el)) for el in range(1, 5)]

fig, ax = plt.subplots(1)
for key, el in enumerate(data):
    ax.plot(x, el, label=str(key))
ax.legend(bbox_to_anchor=(1.04,1), loc="upper left", borderaxespad=0., mode='expand')
plt.tight_layout(rect=[0,0,0.8,1])
Run Code Online (Sandbox Code Playgroud)

哪个产生:

在此输入图像描述

python matplotlib

6
推荐指数
1
解决办法
2449
查看次数

如何将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
查看次数

标签 统计

matplotlib ×10

python ×8

legend ×5

charts ×1

graph ×1

legend-properties ×1

pandas ×1

plot ×1

seaborn ×1