我知道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)上.但也许我得到别的错了?
我正在尝试使用animation.FuncAnimationmatplotlib中的函数创建一部电影.电影看起来很精彩,但是当我用命令保存它时
anim2.save('somefilm.mp4',codec='mpeg4', fps=15)
Run Code Online (Sandbox Code Playgroud)
它开始很好,但后来变得模糊(使用QuickTime和vlc,所以我认为它是电影,而不是播放器).
我玩弄blitting,因为我认为这可能是画布没有重绘的事实,但无济于事.提高比特率也无济于事.
设置dpi=500确实提高了电影的质量,虽然它反复卡住,这使得观看起来很困难.
我只是想知道这是否是最好的,或者我错过了什么?
我有两个三维数组,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数组,我必须做很多重塑操作 - 我想知道是否有更简单的东西.
有没有简单的方法在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)
对于一个曲折线,但我想知道是否有一个更直接的方式?
我正在尝试绘制一系列矩形和圆形,其中圆形位于前景中。
根据下面的帖子,我必须设置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)
才不是:
我想创建一个 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) 我想最小化我的图形周围的空白,但不确定如何 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) 我正在尝试使用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?