我试图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个数字?:
如果没有,是否有可能在Python中对这些数字做出好的猜测?
此外,在上面的示例代码中,我将最后2个数字设置bbox_to_anchor()为1和0,因为我不明白它们是什么或它们如何工作.最后2个数字bbox_to_anchor()是什么意思?
在python中使用matplotlib.图例与我的饼图重叠.尝试了"loc"的各种选项,如"最佳",1,2,3 ...但无济于事.有关如何准确提及图例位置的任何建议(例如从饼图边界给出填充)或至少确保它不重叠?
我目前正在尝试在单个地块上绘制大量数据.我使用重复的颜色和符号构建了我的表示.但是,在绘制最终结果时,图例会略微关闭,因为我无法控制其中的行数.因此,而不是得到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) 我正在绘制一组饼图,每个饼图对相同的两种类型的数据使用相同的两种颜色.
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)
显然,为这些图表中的每一个绘制图例是没有意义的,因为它们都是相同的.那么有什么方法可以将一个图例最终绘制成一个单独的子图形?
我正在尝试为科学文章制作一些数字,所以我希望我的数字具有特定的大小.我还看到默认情况下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文件.
我遇到的问题是,当我在轴外添加一个文本框(通常是一个图例框)时,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)
我在其他地方找到的解决方案是将参数添加bbox_inches = 'tight'到savefig命令.文本框现在包含在我想要的内容中,但pdf现在的大小错误.似乎Matplotlib只是使图形更大,而不是像添加标题和x/y标签时那样减小轴的大小.
例:
plt.close('all')
fig = plt.figure(
figsize = [3,2], …Run Code Online (Sandbox Code Playgroud) 我想创建一组轴,以在父组轴的特定位置形成插入.因此,不宜只使用参数loc=1,2,3中inset_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但又一次,我无法弄清楚如何正确使用它.
我使用以下代码制作了一个多轴图,我无法按照自己的意愿排列图例.我的图表代码如下:
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)
右上方的图例垂直对齐,但我希望它们水平对齐.我找不到任何关于此的文件.我希望它们如下图所示.

谢谢
我想在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中的语法是什么?
我有一个情节,其图例固定在右上角:如何展开图例以适应图表的高度?
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)
哪个产生:
我使用具有不同色调和样式的 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)