我试图让自定义宽高比的地块正确显示。我正在使用Jupyter笔记本进行渲染,但我通常这样做的方法是调整' figsize'子图中的属性。我已经完成了如下操作:
from matplotlib import pyplot as plt
fig,axes = plt.subplots(1,1,figsize=(16.0,8.0),frameon=False)
问题在于,虽然宽高比看起来是正确的(通过眼睛判断),但是这个数字甚至没有用尽甚至接近整个页面宽度,因此很小并且难以阅读。
我猜它的行为就像在左右两侧设置了某种边距,但我无法找到控制它的全局设置。我一直在使用设置列表here,但没有成功找到相关的设置。
我的问题是
matplotlib
参数的更全面,编写良好的文档的地方?我上面链接的那个很尴尬,因为它以示例matplotlibrc
文件的形式提供参数。我想知道是否存在包含所有参数(良好)描述的单个页面。 很容易看出,即使靠近可用的水平空间,该图也不会使用。
笔记本中的代码是:
#imports
import numpy as np
#set up a plot
import matplotlib as mpl
from matplotlib import pyplot as plt
#got smarter about the mpl config: see mplstyles/ directory
plt.style.use('standard')
#set up a 2-d plot
fig,axes = plt.subplots(1,1,figsize=(16.0,8.0),frameon=False)
ax1 = axes
#need to play with axis
mpl.rcParams['ytick.minor.visible'] = False
xmin = -10
xmax = 10
ymin = -10
ymax = 10
x = np.random.normal(0,5,(20000,))
y = np.random.normal(0,5,(20000,))
h = ax1.hist2d(x,y, bins=200, cmap='inferno')
ax1.set_xlim(xmin,xmax)
ax1.set_ylim(ymin,ymax)
ax1.set_xlabel('epoch time [Unix]',**axis_font)
ax1.set_ylabel(r'relative time [$\mu$s]',**axis_font)
ax1.grid(True)
#lgnd= ax1.legend(loc=2,prop={'size':22})
for axis in ['top','bottom','left','right']:
ax1.spines[axis].set_linewidth(2)
plt.tight_layout()
#plt.savefig('figures/thefigure.eps')
plt.show()
我在plt.style.use
命令中使用的mpl样式文件是:
#trying to customize here, see:
#https://matplotlib.org/users/customizing.html
#matplotlib.rc('figure', figsize=(3.4, 3.4*(4/6)))
lines.linewidth : 2
#ticks
xtick.top : False
xtick.bottom : True
xtick.minor.visible : True
xtick.direction : in
xtick.major.size : 8
xtick.minor.size : 4
xtick.major.width : 2
xtick.minor.width : 1
xtick.labelsize : 22
ytick.left : True
ytick.right : False
ytick.minor.visible : True
ytick.direction : in
ytick.major.size : 8
ytick.minor.size : 4
ytick.major.width : 2
ytick.minor.width : 1
ytick.labelsize : 22
#error bars
#errorbar.capsize : 3
#axis stuff
axes.labelsize : 22
编辑2:在绘制结果所需的输出之前,将矢量范围限制在轴的范围内。见下图:
添加/修改的行是:
xnew = x[(np.abs(x)<10) & (np.abs(y)<10)]
ynew = y[(np.abs(x)<10) & (np.abs(y)<10)]
h = ax1.hist2d(xnew,ynew, bins=200, cmap='inferno')
答案 0 :(得分:1)
显然matplotlib 2.2.2中有一个错误,现在已经在开发版本中修复了。您当然可以从github安装当前的开发版本。
问题来自设置轴限制(ax1.set_xlim(-10,10)
),它们小于初始图像。出于某种原因,原始限制仍然用于计算紧密的bbox以保存为png。
解决方法不是手动设置任何轴限制,而是直接计算直方图,并考虑所需的限制。在这种情况下-10,10
,例如:
x = np.random.normal(0,5,(20000,))
y = np.random.normal(0,5,(20000,))
bins = np.linspace(-10,10,201)
h = ax1.hist2d(x,y, bins=bins, cmap='inferno')
答案 1 :(得分:0)
要更改轴标签的字体大小,您必须使用plt.rc
或plt.rcParams
(此here上的更多内容),因此您无需担心这样做当使用figsize时。
我发现您发布的代码没有任何问题,您是否可以发布您所获得的内容以及您希望获得的内容?这就是我在Jupyter笔记本上使用的配置,只是绘制一个非常简单的图:
请注意,但是,Jupyter会自动限制绘图的大小(见下文):
我担心第二个问题无法帮助你,因为我总是发现matplotlib的文档足以满足我的所有需求......祝你好运!