python - Matplotlib boxplot + imageshow(子图)

标签 python matplotlib boxplot subplot

我正在做一些数据可视化的方法,其中之一是用该数据的箱线图显示数据,如下所示:

def generate_data_heat_map(data, x_axis_label, y_axis_label, plot_title, file_path, box_plot=False):
    plt.figure()
    plt.title(plot_title)
    if box_plot:
        plt.subplot(1, 2, 1)
        plt.boxplot(data.data.flatten(), sym='r+')
        plt.subplot(1, 2, 2)

    fig = plt.imshow(data.data, extent=[0, data.cols, data.rows, 0])
    plt.xlabel(x_axis_label)
    plt.ylabel(y_axis_label)
    plt.colorbar(fig)
    plt.savefig(file_path + '.png')
    plt.close()

使用这段代码,这是我得到的图像:

enter image description here

首先,我不明白为什么我的传单没有用红色+表示,而是用标准图案表示。除此之外,因为我想并排绘制箱线图和数据,所以我划分了绘图区域。但这个空间被均分,图形情节变得非常糟糕。我希望箱线图占绘图面积的 1/3,数据占 2/3。

提前谢谢您。

最佳答案

该错误是您的 matplotlib 代码中的一个简单错误。您正在绘制自己的图像。

你所在的地方:

if box_plot:
    plt.subplot(1, 1, 1)
    plt.boxplot(data.data)
    plt.subplot(1, 2, 2)

您需要在对 plt.subplots 的两次调用中指定子图的两行

这会起作用。

if box_plot:
    plt.subplot(1, 2, 1)
    plt.boxplot(data.data)
    plt.subplot(1, 2, 2)

如果您想独立调整绘图的大小,则可以使用 gridspec。您可能想像这样将它们绘制在彼此之上......

import numpy as np
from matplotlib import pyplot as plt
import matplotlib.gridspec as gridspec


def generate_data_heat_map(data, x_axis_label, y_axis_label, plot_title, file_path, box_plot=False):
    plt.figure()
    gs = gridspec.GridSpec(2, 1,height_ratios=[1,4])
    if box_plot:
        plt.subplot(gs[0])
        plt.boxplot(data.data.flatten(), 0, 'rs', 0)
        plt.subplot(gs[1])

    plt.title(plot_title)    
    fig = plt.imshow(data.data, extent=[0, data.cols, data.rows, 0])
    plt.xlabel(x_axis_label)
    plt.ylabel(y_axis_label)
    plt.colorbar(fig)
    plt.savefig(file_path + '.png')
    plt.close()

class Data(object):
    def __init__(self, rows=200, cols=300):
        # The data grid
        self.cols = cols
        self.rows = rows
        # The 2D data structure
        self.data = np.zeros((rows, cols), float)

    def randomise(self):
        self.data = np.random.rand(*self.data.shape)

data = Data()
data.randomise()
generate_data_heat_map(data, 'x', 'y', 'title', 'heat_map', box_plot=True)

nice plot

关于python - Matplotlib boxplot + imageshow(子图),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22441577/

相关文章:

即使使用非捕获组,Python re.sub() 也会替换完整匹配项

python - 逐行构建 pyarrow 表的最快方法

python - xlsxwriter:如何将内部超链接放入表格中并将内容格式化为整数

python - 共享轴 (twinx) 隐藏 y 轴值

python - 扩展 matplotlib Line2D 类

r - ggplot::geom_boxplot() 如何更改 R 中一个框组的宽度

r - 使用 ggplot2 的表格箱线图

python3.5.2 从文件中删除所有匹配的字符

python - (python matplotlib)如何更改 Lollipop 图中每个 Lollipop 的颜色(ax.stem)

boxplot - 选择色调后,Seaborn boxplots 会更改(缩小)框的宽度,我该如何补救?