相关疑难解决方法(0)

使用matplotlib中的许多子图改进子图大小/间距

这个问题非常相似,但不同之处在于我的身材可以达到需要的大小.

我需要在matplotlib中生成一堆垂直堆叠的图.结果将使用figsave保存并在网页上查看,因此我不关心最终图像的高度,只要子图间隔开,这样它们就不会重叠.

无论我有多大的数字,子图总是似乎重叠.

我的代码目前看起来像

import matplotlib.pyplot as plt
import my_other_module

titles, x_lists, y_lists = my_other_module.get_data()

fig = plt.figure(figsize=(10,60))
for i, y_list in enumerate(y_lists):
    plt.subplot(len(titles), 1, i)
    plt.xlabel("Some X label")
    plt.ylabel("Some Y label")
    plt.title(titles[i])
    plt.plot(x_lists[i],y_list)
fig.savefig('out.png', dpi=100)
Run Code Online (Sandbox Code Playgroud)

python matplotlib

260
推荐指数
8
解决办法
32万
查看次数

GridSpec与Python中的共享轴

另一个线程的解决方案建议使用gridspec.GridSpec而不是plt.subplots.但是,当我在子图之间共享轴时,我通常使用如下语法

  fig, axes = plt.subplots(N, 1, sharex='col', sharey=True, figsize=(3,18))
Run Code Online (Sandbox Code Playgroud)

我如何指定sharex以及sharey何时使用GridSpec

python matplotlib

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

Matplotlib subplots_adjust hspace所以标题和xlabels不重叠?

比方说,matplotlib xlabels中有3行子图,其中一行可以与下一行的标题重叠.一个人必须摆弄pl.subplots_adjust(hspace),这很烦人.

是否有一个配方hspace可以防止重叠并适用于任何nrow?

""" matplotlib xlabels overlap titles ? """
import sys
import numpy as np
import pylab as pl

nrow = 3
hspace = .4  # of plot height, titles and xlabels both fall within this ??
exec "\n".join( sys.argv[1:] )  # nrow= ...

y = np.arange(10)
pl.subplots_adjust( hspace=hspace )

for jrow in range( 1, nrow+1 ):
    pl.subplot( nrow, 1, jrow )
    pl.plot( y**jrow )
    pl.title( 5 * ("title %d " % jrow) ) …
Run Code Online (Sandbox Code Playgroud)

python matplotlib

45
推荐指数
3
解决办法
8万
查看次数

使用 python matplotlib 时如何避免“副标题”和“子图”之间的重叠?

我正在尝试绘制一个矩阵来比较一些数据。但情节的标题与子情节重叠:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sn
   
def save_graph_cm(CMatrix):
    # CMatrix is a dict with four 3x3 pandas DataFrame
    k = 'Wine'
    id = 0
    cm = 1
    plt.suptitle("#" + str(id) + " Confusion Matrix for " + k + " dataset")
    for c_matrix in CMatrix:
        plt.subplot(2, 2, cm)
        sn.heatmap(CMatrix[c_matrix], annot=True, cmap="YlOrRd")
        plt.title("CV - " + str(cm-1))
        plt.xlabel("Predicted Classes")
        plt.ylabel("Real Classes")
        cm += 1
    plt.tight_layout()
    plt.show
Run Code Online (Sandbox Code Playgroud)

我现在得到的是:

在此输入图像描述

python matplotlib

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

Matplotlib tiny_layout -- 删除额外的空白/空白空间

我想最小化我的图形周围的空白,但不确定如何 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)

python matplotlib

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

如何定位字幕?

我试图在suptitle多面板图形上方进行调整,但在弄清楚如何调整figsize字体并随后放置字幕时遇到了麻烦。

问题在于调用plt.suptitle("my title", y=...)调整字幕的位置也会调整图形尺寸。几个问题:

  1. suptitle(..., y=1.1)标题实际放在哪里?据我所知,ysuptitle参数的文档指向matplotlib.text.Text,但是当您有多个子图时,我不知道图形坐标的含义。

  2. 什么是对数字的大小指定时的效果ysuptitle

  3. 如何手动调整图形尺寸和间距(subplots_adjust?),以在每个面板中添加图形标题和整个图形的字幕,同时保持图形中每个斧头的大小?

一个例子:

data = np.random.random(size=100)
f, a = plt.subplots(2, 2, figsize=(10, 5))

a[0,0].plot(data)
a[0,0].set_title("this is a really long title\n"*2)
a[0,1].plot(data)
a[1,1].plot(data)

plt.suptitle("a big long suptitle that runs into the title\n"*2, y=1.05);
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

显然,我每次做一个图形时都可以进行调整,但是我需要一个通常不需要人工干预就能解决的解决方案。我已经尝试过受限布局和紧凑布局。都无法可靠地处理任何复杂的图形。

python matplotlib

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

标签 统计

matplotlib ×6

python ×6