相关疑难解决方法(0)

如何在另一个python图中添加不同的图形(作为插图)

我想做一个这样的图表:

来自谷歌的Ilustrative图

问题是,我从一些外部文件获取数据,我可以制作背景图,但我不知道如何在我已经拥有的图中添加另一个图并更改数据以获得不同的结果他们都:

下面我要添加我用来做背景图的代码.希望有人能提供帮助.

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)

python graph matplotlib

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

在轴坐标中查找matplotlib图(包括ticklabels)的范围

我需要在轴坐标中找到包括其相关艺术家(在这种情况下只是刻度和刻度标签)的绘图范围(如matplotlib转换教程中所定义).

这样做的背景是我自动为大量图表创建缩略图(如此SO问题),只有当我可以定位缩略图以使其不会模糊原始图中的数据时.

这是我目前的做法:

  1. 创建一些候选矩形进行测试,从原始绘图的右上角开始向左工作,然后在原始绘图的右下角向左移动.
  2. 对于每个候选矩形:
    1. 使用来自此SO问题的代码将rect的左手侧和右手侧(在轴坐标中)转换为数据坐标,以找到矩形将覆盖的x数据的切片.
    2. 找到矩形覆盖的数据切片的最小/最大y值.
    3. 在数据坐标中找到矩形的顶部和底部.
    4. 使用上述方法,确定矩形是否与任何数据重叠.如果没有,请在当前矩形中绘制缩略图,否则继续.

这种方法的问题在于轴坐标为您提供从(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)

python matplotlib

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

matplotlib 中是否存在用于在子图中定义子图网格的工具?

我有一个我想使用的绘图布局,其中 9 个不同的数据簇被布置在一个方形网格上。网格中的每个框都包含 3 个并排布置的箱线图。

我最初的想法是这将适合 3x3 子图布局,每个单独的子图本身被划分为 3x1 子图布局。

我已经看到了:在 matplotlib中的子图中嵌入小图,这似乎可以让您在子图中定义单独的、手动放置的图。然而,将子图空间递归分割成 < 10 个易于寻址的子图的网格的想法似乎是一个显而易见的想法,我不敢相信它没有被直接实现。

matplotlib

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

fig.add_subplot() *transform* 不起作用?

关于在 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)

python matplotlib

3
推荐指数
1
解决办法
2329
查看次数

如何使用matplotlib将inset_axes添加到子图

我正在尝试在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)

python matplotlib subplot

3
推荐指数
1
解决办法
1131
查看次数

Pyplot:为更大的标题留出空间

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)

我想使用更大的字体,并在顶部的白边留出更多的空间,这样标题就不会被塞进去。令人惊讶的是,尽管进行了一些认真的谷歌搜索,但我完全无法找到该选项!

python matplotlib seaborn

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

标签 统计

matplotlib ×6

python ×5

graph ×1

seaborn ×1

subplot ×1