标签: subplot

子图 axis.set_zorder,图消失

我正在用 绘制 X 图twinx,并且我想设置zorder这些轴的 :

import matplotlib.pyplot as plt 
import numpy as np
from pandas import plotting


x1 = np.linspace(1,20,10) 
y1 = np.random.random_integers(1,20,10)
y2 = np.random.random_integers(1,20,10)
y3 = np.random.random_integers(1,20,10)

fig,ax = plt.subplots()
bx = ax.twinx()
cx = ax.twinx()
colors = getattr(getattr(plotting, '_style'), '_get_standard_colors') 
 (num_colors=5)

ax.plot(x1,y1, label = "1",color= colors[0])
bx.plot(x1,y2, label = "2",color= colors[1])
cx.plot(x1,y3, label = "3",color= colors[2])


cx.spines["right"].set_position(("axes", 1.1))


li,la = ax.get_legend_handles_labels()
li2,la2 = bx.get_legend_handles_labels()
li3,la3 = cx.get_legend_handles_labels()

lines= li+li2+li3
labels = la+la2+la3

ax.legend(lines, …
Run Code Online (Sandbox Code Playgroud)

python matplotlib subplot

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

Seaborn 和 matplotlib 控制子图中的图例

我一直在玩 plt.legend() 和 ax.legend() 以及来自seaborn本身的图例,我想我错过了一些东西。

我的第一个问题是,有人可以向我解释一下它们是如何结合在一起的,它们是如何工作的,如果我有次要情节,什么比什么更好?意思是我可以设置一个一般定义(例如,在此位置的所有子图中都有这个图例),然后为特定子图覆盖这个定义(例如通过 ax.legend() )?

我的第二个问题很实际,也展示了我的问题。我们以seaborn Smokers数据集来说明一下:

import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset("tips")

# define sizes for labels, ticks, text, ...
# as defined here /sf/ask/272998631/
SMALL_SIZE = 10
MEDIUM_SIZE = 14
BIGGER_SIZE = 18

plt.rc('font', size=SMALL_SIZE)          # controls default text sizes
plt.rc('axes', titlesize=SMALL_SIZE)     # fontsize of the axes title
plt.rc('axes', labelsize=BIGGER_SIZE)    # fontsize of the x and y labels
plt.rc('xtick', labelsize=MEDIUM_SIZE)    # fontsize of the tick labels
plt.rc('ytick', labelsize=MEDIUM_SIZE)    # fontsize …
Run Code Online (Sandbox Code Playgroud)

python matplotlib legend subplot seaborn

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

删除 matplotlib 子图并避免留空

虽然删除 matplotlib 子图/轴似乎很容易,例如delaxes

fig, ax = plt.subplots(3,1, sharex=True)
for ii in range(3):
    ax[ii].plot(arange(10), 2*arange(10))
fig.delaxes(ax[1])
Run Code Online (Sandbox Code Playgroud)

这将始终留下空白在删除的子图/轴的位置

所提出的解决方案似乎都无法解决此问题: Delete a subplot Clearing a subplot in Matplotlib

有没有一种方法可以在显示或保存子图之前基本上挤压子图并删除空白?

我基本上正在寻找将剩余的子图转移到“密集”网格中的最简单方法,以便以前的子图没有空白,可能比重新创建新的(子)图更好。

python matplotlib subplot

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

数据框中所有数据的箱线图:错误“'numpy.ndarray'对象没有属性'箱线图'”

我试图在子图中显示与数据框df中每列相对应的所有箱线图

我已阅读这个问题: Subplot for seaborn boxplot 并尝试实现给定的解决方案:

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

d = {'col1': [1, 2, 5.5, 100], 'col2': [3, 4, 0.2, 3], 'col3': [1, 4, 6, 30], 'col4': [2, 24, 0.2, 13], 'col5': [9, 84, 0.9, 3]}
df = pd.DataFrame(data=d)

names = list(df.columns)
f, axes = plt.subplots(round(len(names)/3), 3)  
y = 0;
for name in names:
    sns.boxplot(x= df[name], ax=axes[y])
    y = y …
Run Code Online (Sandbox Code Playgroud)

python boxplot dataframe subplot seaborn

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

使用相同的facet数据向每个facet_wrap添加子图

我尝试根据与相应facet_wrap 图中相同的数据,将直方图splot 添加到facet_wrap 图的每个部分geom_sf 图。

我通过谷歌找到了一些方法,但到目前为止还没有具体的方法。

我之前的做法:

library(sf)
library(ggplot2)

nc <- st_read(system.file("shape/nc.shp", package="sf"))
nc <- rbind(nc, nc[rep(1:100, 3), ])
nc <- nc[order(nc$NAME),]
nc$GROUP <- c("A", "B", "C", "D")
nc$VALUE <- runif(400, min=0, max=10)

main <- ggplot() +
  geom_sf(data = nc,
          aes(fill = VALUE),
          color = NA) +
  scale_fill_gradientn(colours = c("#f3ff2c", "#96ffea", "#00429d"),
                       guide = "colorbar") +
  coord_sf(datum = NA) +
  theme(panel.background = element_blank(),
        strip.background = element_blank(),) +
  facet_wrap(~ GROUP, nrow = 2)

sub <- ggplot(nc, aes(x=VALUE)) + 
  geom_histogram(binwidth = 1) …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 facet-wrap subplot

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

子图中的 Seaborn 热图 - 对齐 x 轴

我正在尝试绘制一个包含两个子图、一个seaborn 热图和简单的matplotlib 线的图形。然而,当共享两个图的 x 轴时,它们没有对齐,如下图所示:

数字

看起来问题与这篇文章类似,但是在显示时ax[0].get_xticks()ax[1].get_xticks()得到了相同的位置,所以我不知道要更改什么。在我的图片中,偏差似乎超过 0.5。

我究竟做错了什么?

我用来绘制该图的代码如下:

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

M_1=np.random.random((15,15))
M_2=np.random.random((15,15))

L_1=np.random.random(15)
L_2=np.random.random(15)

x=range(15)

cmap = sns.color_palette("hot", 100)
sns.set(style="white")

fig, ax  = plt.subplots(2, 1, sharex='col', figsize=(10, 12))

ax[0].plot(x,L_1,'-', marker='o',color='tab:orange')
sns.heatmap(M_1, cmap=cmap, vmax=np.max(M_1), center=np.max(M_1)/2., square=False, ax=ax[1])
Run Code Online (Sandbox Code Playgroud)

python matplotlib heatmap subplot seaborn

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

matplotlib 子图的奇怪之处

我正在按照教程水平制作两个子图。根据示例,以下内容应该有效。

import matplotlib.pylab as plt
import numpy

# Sample data
x = numpy.linspace(0, 2 * numpy.pi, 400)
y1 = numpy.sin(x ** 2)
y2 = numpy.cos(x ** 2)

figure, axes = plt.subplots(1, 2)
axes[0, 0].plot(x, y)
axes[0, 1].plot(x, y)
Run Code Online (Sandbox Code Playgroud)

不幸的是,我收到以下错误消息。

---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-4-124cb6e8d977> in <module>
      8 
      9 figure, axes = plt.subplots(1, 2)
---> 10 axes[0, 0].plot(x, y)
     11 axes[0, 1].plot(x, y)

IndexError: too many indices for array: array is 1-dimensional, but 2 were indexed …
Run Code Online (Sandbox Code Playgroud)

python matplotlib subplot

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

设置子图的绝对大小

我知道如何使用 gridspec 或 subplots_adjust 设置图形内子图的相对大小,并且我知道如何使用 Figsize 设置图形的大小。我的问题是设置子图的绝对大小。

用例:我正在制作两个单独的图,它们将保存为学术论文的 pdf 格式。一种有两个子图,一种有三个子图(两种情况都在 1 行中)。我需要 5 个子图中的每一个都具有完全相同的大小,并且在生成的 PDF 中具有完全相同的字体大小(轴标签、刻度标签等)。在下面的示例中,字体大小相同,但子图却不同。如果我使生成的 PDF 的高度相同(因此轴也相同),则 3-subplots.pdf 上的字体将小于 2-subplots.pdf 的字体。

微量元素

import matplotlib.pyplot as plt

subplots = [2, 3]
for i, cols in enumerate(subplots):

    fig, ax = plt.subplots(1, cols, sharey=True, subplot_kw=dict(box_aspect=1))

    for j in range(cols):
        ax[j].set_title(f'plot {j*cols}')
        ax[j].set_xlabel('My x label')
    ax[0].set_ylabel('My y label')

    plt.tight_layout()
    plt.savefig(f'{cols}-subplots.pdf', bbox_inches='tight', pad_inches=0)
    plt.show()
Run Code Online (Sandbox Code Playgroud)

输出输出

python matplotlib subplot

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

如何删除子图之间的"空"空间?

我正在制作一个总共68个子图的数字,并希望删除它们之间的空白区域.这就是我所拥有的:

情节太多了.

我该怎么做呢?

编辑:使用plt.tight_layout()会使情况变得更糟:

子图之间的空间更大

这是我的代码:

for j in range(0,len(sort_yf)):
for i in range(0,len(yf)):
    if yf[i]==sort_yf[j]:
        sort_ID=np.append(sort_ID,'output/'+ID[i]+'.png')
for i in range (1,69):
    plt.subplot(17,4,i,aspect='equal')
    plots=img.imread(sort_ID[i])
    plt.imshow(plots)
    plt.axis('off')
plt.show()
Run Code Online (Sandbox Code Playgroud)

python plot matplotlib subplot imshow

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

matlab中是否有任何选项可以优化(行,列)以显示子图?

我必须在图中用子图绘制不同的图形,但我不知道将绘制多少图形,因为它取决于用户引入的数据(for loop).为了绘制子图,我需要知道列数和行数.在matlab中是否有任何选项可以让matlab配置最佳数量的列和行来显示知道要完成的总子图的情节?我的意思是subplot(a,b,c)=>最佳a,b组合知道c.

现在我要求用户引入列数和行数,但这有点让人不舒服.也许一个将总子图分解为2个最等等因子的算法应该可行,但我认为编码很难.如果它太复杂了我会按照自己的方式跟进,但我很好奇.

matlab plot subplot

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

标签 统计

subplot ×10

python ×8

matplotlib ×7

seaborn ×3

plot ×2

boxplot ×1

dataframe ×1

facet-wrap ×1

ggplot2 ×1

heatmap ×1

imshow ×1

legend ×1

matlab ×1

r ×1