小编mzz*_*zzx的帖子

如何在图形坐标中指定matplotlib中的图例位置

我知道bbox_to_anchor关键字和这个帖子,它非常有用地建议如何手动放置图例:

如何将传说从情节中删除

但是,我想在图表中使用我的x轴和y轴的坐标来指定图例位置(在图中),因为我可能需要将图形移动到具有不同轴环境的大图中,每次我这样做时,我都不想手动使用这些坐标.这可能吗?

编辑:这里有一个小例子:

import numpy as n
f, axarr = plt.subplots(2,sharex=True)
axarr[1].set_ylim([0.611,0.675])
axarr[0].set_ylim([0.792,0.856]) 
axarr[0].plot([0, 0.04, 0.08],n.array([ 0.83333333,  0.82250521,0.81109048]), label='test1') 
axarr[0].errorbar([0, 0.04, 0.08],n.array([ 0.8,  0.83,   0.82]),n.array([0.1,0.1,0.01]), label='test2') 
axarr[1].plot([0, 0.04, 0.08],n.array([ 0.66666667,  0.64888304,  0.63042428]))
axarr[1].errorbar([0, 0.04, 0.08],n.array([ 0.67,  0.64,  0.62]),n.array([ 0.01,  0.05,  0.1]))
axarr[0].legend(bbox_to_anchor=(0.04, 0.82, 1., .102),labelspacing=0.1,       handlelength=0.1, handletextpad=0.1,frameon=False, ncol=4, columnspacing=0.7)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我觉得让我感到困惑的是,传说实际上并没有从0.82开始,实际上对于我的大图(有5个这种类型的子图),我需要使用图例坐标bbox_to_anchor =(0.04,1.15,1.,.010)为了使图例出现在坐标(0.02,0.83)上.但也许我得到别的错了?

python matplotlib

30
推荐指数
4
解决办法
7万
查看次数

matplotlib动画电影:电影质量随时间下降

我正在尝试使用animation.FuncAnimationmatplotlib中的函数创建一部电影.电影看起来很精彩,但是当我用命令保存它时

anim2.save('somefilm.mp4',codec='mpeg4', fps=15)
Run Code Online (Sandbox Code Playgroud)

它开始很好,但后来变得模糊(使用QuickTime和vlc,所以我认为它是电影,而不是播放器).

我玩弄blitting,因为我认为这可能是画布没有重绘的事实,但无济于事.提高比特率也无济于事.

设置dpi=500确实提高了电影的质量,虽然它反复卡住,这使得观看起来很困难.

我只是想知道这是否是最好的,或者我错过了什么?

python matplotlib

15
推荐指数
2
解决办法
7968
查看次数

查找沿另一个数组中的轴的最小值对应的数组

我有两个三维数组,a和b,并且想要找到b的2D子阵列,其中a的元素沿着第三轴具有最小值,即

a=n.random.rand(20).reshape((5,2,2))
b=n.arange(20).reshape((5,2,2))
c=n.argmin(a,2) #indices with minimal value of a
d=n.zeros_like(c) #the array I want
for i in range(5):
  for j in range(2):
     d[i,j] = b[i,j,c[i,j]] 
Run Code Online (Sandbox Code Playgroud)

有没有办法可以在没有双循环的情况下获得这些值?

我知道这个答案: 在numpy数组中将min值替换为另一个 但是如果我想让它适用于我的3D数组,我必须做很多重塑操作 - 我想知道是否有更简单的东西.

python arrays numpy vectorization

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

matplotlib中的锯齿形或波浪线

有没有简单的方法在matplotlib中绘制锯齿形或波浪线?

我知道不同的线条样式(http://matplotlib.org/examples/lines_bars_and_markers/line_styles_reference.html),我当然知道它不是绘图

plt.figure(); plt.plot(n.linspace(0.7,1.42,100),[0.7]*100)
Run Code Online (Sandbox Code Playgroud)

我可以策划

plt.figure(); plt.plot(n.linspace(0.7,1.42,100),[0.69,0.71]*50)
Run Code Online (Sandbox Code Playgroud)

对于一个曲折线,但我想知道是否有一个更直接的方式?

python matplotlib

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

matplotlib修补程序集中的Zorder规范?

我正在尝试绘制一系列矩形和圆形,其中圆形位于前景中。

根据下面的帖子,我必须设置zorder参数: 添加到图形中的补丁在alpha = 1的情况下不是不透明的。为什么?

当我分别绘制所有圆时,这种方法效果很好,但是当我尝试将一系列圆放入一个集合中并添加该集合时,这种方法效果很好

fig,ax=plt.subplots(1)
p_fancy = FancyBboxPatch((1,1),
                         0.5, 0.5,
                         boxstyle="round,pad=0.1",
                         fc='beige',
                         ec='None', zorder=1)
ax.add_patch(p_fancy)
ax.set_xlim([0,2])
ax.set_ylim([0,2])
circ=patches.Circle ((1,1), 0.2, zorder=10)
ax.add_patch(circ)
Run Code Online (Sandbox Code Playgroud)

工作正常: 在此处输入图片说明

fig,ax=plt.subplots(1)
p_fancy = FancyBboxPatch((1,1),
                         0.5, 0.5,
                         boxstyle="round,pad=0.1",
                         fc='beige',
                         ec='None', zorder=1)
ax.add_patch(p_fancy)
ax.set_xlim([0.,2])
ax.set_ylim([0.,2])
circ=[]
circ.append(patches.Circle ((1,1), 0.2, zorder=10))
coll=PatchCollection(circ)
ax.add_collection(coll)
Run Code Online (Sandbox Code Playgroud)

才不是:

在此处输入图片说明 是否有原因,或者zorder是否以我不了解的方式与补丁程序集合不同?

python matplotlib

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

Matplotlib xlabel Arial 格式,其中一个单词为斜体

我想创建一个 matplotlib 图形,其 x 轴标签采用 Arial 字体,并且有一个斜体字。

我可以用乳胶字体创建带有 x 轴标签的图形,其中一个单词为斜体;我还可以在 Arial 中创建带有 x 轴标签的图形,只要我将整个标签设置为斜体或将整个标签设置为正常;但我无法将 xlabel 的一部分设为 Arial 斜体,将另一部分设为 Arial 正常。

我主要尝试以下代码的排列:

from matplotlib import pyplot as plt
import numpy as n
import matplotlib
from matplotlib.font_manager import FontProperties
font = {'family' : 'Arial',
    'weight' : 'medium',
    'size'   : 20,
    'style'  : 'normal'}
font0 = {'family' : 'Arial',
    'weight' : 'medium',
    'size'   : 20,
    'style'  : 'italic'}


matplotlib.rcParams['mathtext.fontset'] = 'custom'
matplotlib.rcParams['mathtext.rm'] = 'Arial'
matplotlib.rcParams['mathtext.it'] = 'Arial'


matplotlib.rc('font', **font)
#matplotlib.rc('font', **font0)
matplotlib.rc('text', usetex=False) …
Run Code Online (Sandbox Code Playgroud)

python latex matplotlib

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

Matplotlib tiny_layout -- 删除额外的空白/空白空间

我想最小化我的图形周围的空白,但不确定如何 a) 为我的图像周围的 savefig 命令精确指定一个边界框,以及 b) 为什么紧布局命令在我的工作示例中不起作用。

在我当前的示例中,我在我的对象/补丁周围设置了一个轴环境(紧密到黄色对象和蓝色框几乎分别在左侧和底部被切断)。但是,这仍然给我左侧和底部的空白: 在此处输入图片说明

我知道这来自轴对象(我关闭了它) 在此处输入图片说明

但是,在这种情况下,我不确定如何摆脱空白。我认为可以像讨论的那样指定边界框Matplotlib tiny_layout() 不考虑图形 suptitle 而是插入

fig.tight_layout(rect=[0.1,0.1,0.9, 0.95]), 
Run Code Online (Sandbox Code Playgroud)

这只会给我更多的空白: 在此处输入图片说明

我知道如何通过插入一个填充整个图形等的轴对象来绕过这个,但这感觉就像一个愚蠢的黑客。有没有一种简单快捷的方法来做到这一点?

我的代码是:

import matplotlib
from matplotlib import pyplot as plt
from matplotlib.path import Path
import matplotlib.patches as patches
from matplotlib.collections import PatchCollection
from matplotlib.patches import FancyBboxPatch


plt.ion()

fig, ax=plt.subplots(1)
ax.set_xlim([-0.38,7.6])
ax.set_ylim([-0.71,3.2])
ax.set_aspect(0.85)
#objects 
circs2=[]
circs2.append( patches.Circle((-0.3, 1.225), 0.1,ec="none"))
circs2.append( patches.RegularPolygon ((-0.3,1.225+1.5),4, 0.1) )
coll2 = PatchCollection (circs2,zorder=10)
coll2.set_facecolor(['yellow', 'gold'])
ax.add_collection(coll2)

#squares
p_fancy=FancyBboxPatch((0.8,1.5),1.35,1.35,boxstyle="round,pad=0.1",fc='red', ec='k',alpha=0.7, zorder=1)
ax.add_patch(p_fancy)
x0=4.9
p_fancy=FancyBboxPatch((1.15+x0,-0.6),0.7*1.15,0.7*1.15,boxstyle="round,pad=0.1", fc='blue', ec='k',alpha=0.7, zorder=1) …
Run Code Online (Sandbox Code Playgroud)

python matplotlib

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

Logpp图中的Matplotlib箭头

我正在尝试使用matplotlib在日志记录图中绘制箭头,如下所示:

在此处输入图片说明

我知道有人建议关闭轴(Matplotlib:在对数对数图中绘制垂直箭头),但是我确实需要轴。另外,该建议似乎没有任何改变(除了按预期关闭轴以外):

plt.figure();plt.loglog([1,10,60],[1,0.1,0.005])
plt.axis('off')
plt.arrow(2,0.002,5,0.098,'k',head_length=0.3)
Run Code Online (Sandbox Code Playgroud)

到目前为止,我的工作一直是用线性轴环境创建一个不可见的插图(意思是:轴已关闭),并在插图中绘制箭头,这种方法虽然有效,但确实有点令人不愉快。有没有更简单的方法?还是有人建议通过例如添加这些类型的附加功能。在主图绘制完成后,inkscape?

python matplotlib

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

标签 统计

python ×8

matplotlib ×7

arrays ×1

latex ×1

numpy ×1

vectorization ×1