我想做一个这样的图表:

问题是,我从一些外部文件获取数据,我可以制作背景图,但我不知道如何在我已经拥有的图中添加另一个图并更改数据以获得不同的结果他们都:
下面我要添加我用来做背景图的代码.希望有人能提供帮助.
from __future__ import division
import numpy as np
import matplotlib.pyplot as plt
plt.rc('text',usetex=True)
font = {'family':'serif','size':16}
plt.rc('font',**font)
plt.rc('legend',**{'fontsize':14})
matplotlib.rcParams['text.latex.preamble']=[r'\usepackage{amsmath}']
data=np.loadtxt(r'C:\...\file.txt')
plt.plot(data[:,0],data[:,6],linewidth = 3,label='B$_0$ = 1.5 T d',linestyle= '--', color='black')
plt.show()
Run Code Online (Sandbox Code Playgroud) 我需要在轴坐标中找到包括其相关艺术家(在这种情况下只是刻度和刻度标签)的绘图范围(如matplotlib转换教程中所定义).
这样做的背景是我自动为大量图表创建缩略图(如此SO问题),只有当我可以定位缩略图以使其不会模糊原始图中的数据时.
这是我目前的做法:
这种方法的问题在于轴坐标为您提供从(0,0)(轴的左下角)到(1,1)(右上角)的轴的范围,并且不包括刻度线和刻度标签(缩略图没有标题,轴标签,传说或其他艺术家).
所有图表都使用相同的字体大小,但图表具有不同长度的刻度标签(例如1.5或者1.2345 * 10^6),尽管这些在绘制插图之前是已知的.有没有办法将字体大小/点转换为轴坐标?或者,也许有比上面更好的方法(边界框?).
以下代码实现了上述算法:
import math
from matplotlib import pyplot, rcParams
rcParams['xtick.direction'] = 'out'
rcParams['ytick.direction'] = 'out'
INSET_DEFAULT_WIDTH = 0.35
INSET_DEFAULT_HEIGHT = 0.25
INSET_PADDING = 0.05
INSET_TICK_FONTSIZE = 8
def axis_data_transform(axis, xin, yin, inverse=False):
"""Translate between axis and data coordinates.
If 'inverse' is True, data coordinates are translated to axis coordinates,
otherwise the transformation is reversed. …Run Code Online (Sandbox Code Playgroud) 我有一个我想使用的绘图布局,其中 9 个不同的数据簇被布置在一个方形网格上。网格中的每个框都包含 3 个并排布置的箱线图。
我最初的想法是这将适合 3x3 子图布局,每个单独的子图本身被划分为 3x1 子图布局。
我已经看到了:在 matplotlib中的子图中嵌入小图,这似乎可以让您在子图中定义单独的、手动放置的图。然而,将子图空间递归分割成 < 10 个易于寻址的子图的网格的想法似乎是一个显而易见的想法,我不敢相信它没有被直接实现。
关于在 matplotlib 中的子图中嵌入小图的帖子,我正在研究这个解决方案,但由于某种原因,转换被忽略了!
我错了吗?还是有bug?
import matplotlib.pyplot as plt
import numpy as np
axes = []
x = np.linspace(-np.pi,np.pi)
fig = plt.figure(figsize=(10,10))
subpos = (0,0.6)
for i in range(4):
axes.append(fig.add_subplot(2,2,i))
for axis in axes:
axis.set_xlim(-np.pi,np.pi)
axis.set_ylim(-1,3)
axis.plot(x,np.sin(x))
fig.add_axes([0.5,0.5,0.1,0.1],transform=axis.transAxes)
plt.show()
Run Code Online (Sandbox Code Playgroud) 我正在尝试在matplotlib中绘制多个子图,每个子图应具有插入轴。我可以使用添加的插入轴使代码示例适用于单个轴mpl_toolkits.axes_grid.inset_locator.inset_axes(),并且可以在没有插入轴的情况下很好地绘制子图,但是当尝试在循环中对子图进行相同操作时,我进入TypeError: 'AxesHostAxes' object is not callable 了第二个子图。当number_of_plotsis == 1而不是> 1 时应该工作似乎有点奇怪。我应该怎么做,还是一个bug?(matplotlib.__version__是“ 1.5.1”)
from matplotlib import pyplot as plt
from mpl_toolkits.axes_grid.inset_locator import inset_axes
import numpy as np
x = np.linspace(0, 2 * np.pi, 100)
y = np.sin(x)
n_row, n_col = 4, 4
fig = plt.figure(1,(10,10))
#number_of_plots = 1 Works!
number_of_plots = n_row * n_col # Does not work!
for idx in range(number_of_plots):
ax = fig.add_subplot(n_row, n_col, idx + 1)
ax.plot(x, y)
inset_axes = …Run Code Online (Sandbox Code Playgroud) sns.boxplot(data=df, width=0.5)
plt.title(f'Distribution of scores for initial and resubmission\
\nonly among students who resubmitted at all.\
\n(n = {df.shape[0]})')
Run Code Online (Sandbox Code Playgroud)
我想使用更大的字体,并在顶部的白边留出更多的空间,这样标题就不会被塞进去。令人惊讶的是,尽管进行了一些认真的谷歌搜索,但我完全无法找到该选项!