gpt4 book ai didi

python - Matplotlib boxplot + imageshow(子图)

转载 作者:行者123 更新时间:2023-12-01 05:20:49 26 4
gpt4 key购买 nike

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

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com